Možnosti registrace aplikace SAML v Azure AD B2C
Tento článek popisuje možnosti konfigurace, které jsou k dispozici při připojování Azure Active Directory B2C (Azure AD B2C) k aplikaci SAML (Security Assertion Markup Language).
Než začnete, pomocí selektoru Zvolit typ zásady zvolte typ zásady, kterou nastavujete. Azure Active Directory B2C nabízí dvě metody pro definování způsobu interakce uživatelů s vašimi aplikacemi: prostřednictvím předdefinovaných toků uživatelů nebo prostřednictvím plně konfigurovatelných vlastních zásad. Kroky vyžadované v tomto článku se pro každou metodu liší.
Tato funkce je dostupná jenom pro vlastní zásady. Pro kroky nastavení vyberte v předchozím selektoru vlastní zásady .
Zadání podpisu odpovědi SAML
Můžete zadat certifikát, který se má použít k podepsání zpráv SAML. Zpráva je <samlp:Response>
prvek v odpovědi SAML odeslané do aplikace.
Pokud ještě nemáte klíč zásad, vytvořte ho. Potom nakonfigurujte SamlMessageSigning
položku metadat v technickém profilu vystavitele tokenu SAML. StorageReferenceId
musí odkazovat na název klíče zásady.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<!-- SAML Token Issuer technical profile -->
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
...
<CryptographicKeys>
<Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
...
</CryptographicKeys>
...
</TechnicalProfile>
Algoritmus podpisu
Můžete nakonfigurovat algoritmus podpisu, který se používá k podepsání kontrolního výrazu SAML. Možné hodnoty jsou Sha256
, , Sha512
Sha384
nebo Sha1
. Ujistěte se, že technický profil a aplikace používají stejný algoritmus podpisu. Použijte pouze algoritmus, který váš certifikát podporuje.
Nakonfigurujte algoritmus podpisu pomocí XmlSignatureAlgorithm
klíče metadat v rámci elementu předávající strany Metadata
.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="XmlSignatureAlgorithm">Sha256</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Kontrola podpisu kontrolního výrazu SAML
Pokud vaše aplikace očekává podepsání oddílu kontrolního výrazu SAML, ujistěte se, že poskytovatel služby SAML nastavil WantAssertionsSigned
hodnotu true
. Pokud je nastavená false
na nebo neexistuje, oddíl kontrolního výrazu se nepodepíše.
Následující příklad ukazuje metadata pro poskytovatele služby SAML s WantAssertionsSigned
nastavenou na true
.
<EntityDescriptor ID="id123456789" entityID="https://samltestapp2.azurewebsites.net" validUntil="2099-12-31T23:59:59Z" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
<SPSSODescriptor WantAssertionsSigned="true" AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
...
</SPSSODescriptor>
</EntityDescriptor>
Podpisový certifikát
Vaše zásada musí zadat certifikát, který se použije k podepsání oddílu kontrolních výrazů SAML odpovědi SAML. Pokud ještě nemáte klíč zásad, vytvořte ho. Potom nakonfigurujte SamlAssertionSigning
položku metadat v technickém profilu vystavitele tokenu SAML. StorageReferenceId
musí odkazovat na název klíče zásady.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<!-- SAML Token Issuer technical profile -->
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
...
<CryptographicKeys>
<Key Id="SamlAssertionSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
...
</CryptographicKeys>
...
</TechnicalProfile>
Povolení šifrování v kontrolních výrazech SAML
Pokud vaše aplikace očekává, že kontrolní výrazy SAML budou v šifrované podobě, ujistěte se, že je v zásadách Azure AD B2C povolené šifrování.
Azure AD B2C používá certifikát veřejného klíče poskytovatele služeb k šifrování kontrolního výrazu SAML. Veřejný klíč musí existovat v koncovém bodu metadat aplikace SAML s hodnotou nastavenou KeyDescriptor
use
na Encryption
, jak je znázorněno v následujícím příkladu:
<KeyDescriptor use="encryption">
<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>valid certificate</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
Pokud chcete službě Azure AD B2C povolit odesílání šifrovaných kontrolních výrazů, nastavte WantsEncryptedAssertion
položku metadat na true
v technickém profilu předávající strany. Můžete také nakonfigurovat algoritmus, který se používá k šifrování kontrolního výrazu SAML.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="WantsEncryptedAssertions">true</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Metoda šifrování
Pokud chcete nakonfigurovat metodu šifrování, která se používá k šifrování dat kontrolního výrazu SAML, nastavte DataEncryptionMethod
klíč metadat v rámci předávající strany. Možné hodnoty jsou Aes256
(výchozí), Aes192
, Sha512
nebo Aes128
. Metadata řídí hodnotu elementu <EncryptedData>
v odpovědi SAML.
Pokud chcete nakonfigurovat metodu šifrování pro šifrování kopie klíče použitého k šifrování dat kontrolního výrazu SAML, nastavte KeyEncryptionMethod
klíč metadat v rámci předávající strany. Možné hodnoty jsou:
Rsa15
(výchozí): Algoritmus PKCS (Public Key Cryptography Standard) RSA Verze 1.5RsaOaep
: Algoritmus šifrování OAEP (Optimal Asymetrické šifrování OAEP).
Metadata řídí hodnotu elementu <EncryptedKey>
v odpovědi SAML.
Následující příklad ukazuje EncryptedAssertion
část kontrolního výrazu SAML. Šifrovaná datová metoda je Aes128
a šifrovaná metoda klíče je Rsa15
.
<saml:EncryptedAssertion>
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Type="http://www.w3.org/2001/04/xmlenc#Element">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
<dsig:KeyInfo>
<xenc:EncryptedKey>
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<xenc:CipherData>
<xenc:CipherValue>...</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedKey>
</dsig:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>...</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</saml:EncryptedAssertion>
Formát šifrovaných kontrolních výrazů můžete změnit. Pokud chcete nakonfigurovat formát šifrování, nastavte UseDetachedKeys
klíč metadat v rámci předávající strany. Možné hodnoty: true
nebo false
(výchozí). Pokud je hodnota nastavena na true
, odpojené klíče přidávají šifrovaný kontrolní výraz jako podřízený EncryptedAssertion
EncryptedData
místo .
Nakonfigurujte metodu šifrování a formát pomocí klíčů metadat v rámci technického profilu předávající strany:
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="DataEncryptionMethod">Aes128</Item>
<Item Key="KeyEncryptionMethod">Rsa15</Item>
<Item Key="UseDetachedKeys">false</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Konfigurace toku iniciovaného zprostředkovatele identity
Pokud vaše aplikace očekává přijetí kontrolního výrazu SAML bez prvního odeslání požadavku SAML AuthN na zprostředkovatele identity (IDP), musíte nakonfigurovat Azure AD B2C pro tok iniciovaný zprostředkovatelem identity.
V toku iniciovaného zprostředkovatelem identity (Azure AD B2C) spustí proces přihlašování. Zprostředkovatel identity odešle nevyžádanou odpověď SAML poskytovateli služby (vaší aplikaci předávající strany).
V současné době nepodporujeme scénáře, kdy je iniciační zprostředkovatel identity externím zprostředkovatelem identity federovaným s Azure AD B2C, jako je Active Directory Federation Services (AD FS) nebo Salesforce. Tok iniciovaný zprostředkovatelem identity se podporuje jenom pro ověřování místních účtů v Azure AD B2C.
Pokud chcete povolit tok iniciovaný zprostředkovatelem identity, nastavte IdpInitiatedProfileEnabled
položku metadat do true
technického profilu předávající strany.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="IdpInitiatedProfileEnabled">true</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Pokud se chcete přihlásit nebo zaregistrovat uživatele prostřednictvím toku iniciovaného zprostředkovatele identity, použijte následující adresu URL:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/generic/login?EntityId=<app-identifier-uri>&RelayState=<relay-state>
Nahraďte následující hodnoty:
- Nahraďte
<tenant-name>
názvem vašeho tenanta. - Nahraďte
<policy-name>
názvem zásad předávající strany SAML. - Nahraďte
<app-identifier-uri>
hodnotou v souboru metadat, napříkladhttps://contoso.onmicrosoft.com/app-name
.identifierUris
- [Volitelné] nahraďte
<relay-state>
hodnotou obsaženou v autorizační žádosti, která se vrátí také v odpovědi tokenu. Parametrrelay-state
se používá ke kódování informací o stavu uživatele v aplikaci před tím, než došlo k žádosti o ověření, například ke stránce, na které se nacházel.
Ukázková zásada
K testování pomocí testovací aplikace SAML můžete použít úplnou ukázkovou zásadu:
- Stáhněte si ukázkovou zásadu přihlášení iniciovanou samL-SP.
- Aktualizujte
TenantId
ho tak, aby odpovídal názvu vašeho tenanta. Tento článek používá příklad contoso.b2clogin.com. - Ponechte název zásady B2C_1A_signup_signin_saml.
Konfigurace doby života odpovědi SAML
Můžete nakonfigurovat dobu, po kterou zůstane odpověď SAML platná. Nastavte životnost pomocí TokenLifeTimeInSeconds
položky metadat v technickém profilu vystavitele tokenu SAML. Tato hodnota je počet sekund, které mohou uplynuly z NotBefore
časového razítka vypočítaného v době vystavení tokenu. Výchozí životnost je 300 sekund (pět minut).
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
<Metadata>
<Item Key="TokenLifeTimeInSeconds">400</Item>
</Metadata>
...
</TechnicalProfile>
Konfigurace nerovnoměrné distribuce času odpovědi SAML
Můžete nakonfigurovat nerovnoměrnou distribuci času použitou na časové razítko odpovědi NotBefore
SAML. Tato konfigurace zajišťuje, že pokud se časy mezi dvěma platformami nesynchronizují, bude kontrolní výraz SAML stále považován za platný, pokud je v této době nerovnoměrná distribuce.
Nastavte nerovnoměrnou distribuci času pomocí TokenNotBeforeSkewInSeconds
položky metadat v technickém profilu vystavitele tokenu SAML. Šikmá hodnota je uvedena v sekundách s výchozí hodnotou 0. Maximální hodnota je 3600 (jedna hodina).
Pokud je například TokenNotBeforeSkewInSeconds
nastavená hodnota 120
sekund:
- Token se vydává v 13:05:10 UTC.
- Token je platný od 13:03:10 UTC.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
<Metadata>
<Item Key="TokenNotBeforeSkewInSeconds">120</Item>
</Metadata>
...
</TechnicalProfile>
Odebrání milisekund z data a času
Můžete určit, jestli se v odpovědi SAML odeberou milisekundy z hodnot data a času. (Mezi tyto hodnoty patří IssueInstant
, NotBefore
, NotOnOrAfter
a AuthnInstant
.) Pokud chcete odebrat milisekundy, nastavte RemoveMillisecondsFromDateTime
klíč metadat v rámci předávající strany. Možné hodnoty: false
(výchozí) nebo true
.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2" />
<Metadata>
<Item Key="RemoveMillisecondsFromDateTime">true</Item>
</Metadata>
<OutputClaims>
...
</OutputClaims>
<SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true" />
</TechnicalProfile>
</RelyingParty>
Přepsání identifikátoru URI vystavitele pomocí ID vystavitele
Pokud máte více aplikací SAML, které závisí na různých entityID
hodnotách, můžete hodnotu v souboru předávající strany přepsat IssuerUri
. Pokud chcete přepsat identifikátor URI vystavitele, zkopírujte technický profil s Saml2AssertionIssuer
ID ze základního souboru a přepište IssuerUri
hodnotu.
Tip
<ClaimsProviders>
Zkopírujte oddíl ze základu a zachovejte tyto prvky v rámci zprostředkovatele deklarací identity: <DisplayName>Token Issuer</DisplayName>
, <TechnicalProfile Id="Saml2AssertionIssuer">
a <DisplayName>Token Issuer</DisplayName>
.
Příklad:
<ClaimsProviders>
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Metadata>
<Item Key="IssuerUri">customURI</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpInSAML" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2" />
<Metadata>
…
Správa relace
Relaci mezi Azure AD B2C a aplikací předávající strany SAML můžete spravovat pomocí UseTechnicalProfileForSessionManagement
elementu a SamlSSOSessionProvider.
Vynucení opětovného ověření uživatelů
Aby se uživatelé mohli znovu ověřit, může aplikace do žádosti o ověření SAML zahrnout ForceAuthn
atribut. Atribut ForceAuthn
je logická hodnota. Pokud je nastavená na true
hodnotu , relace uživatele se v Azure AD B2C zneplatní a uživatel bude nucen znovu provést ověření.
Následující požadavek na ověření SAML ukazuje, jak nastavit ForceAuthn
atribut na true
.
<samlp:AuthnRequest
Destination="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_SAML2_signup_signin/samlp/sso/login"
ForceAuthn="true" ...>
...
</samlp:AuthnRequest>
Podepsání metadat SAML zprostředkovatele identity Azure AD B2C
Pokud to aplikace vyžaduje, můžete azure AD B2C instruovat dokument metadat pro zprostředkovatele identity SAML. Pokud ještě nemáte klíč zásad, vytvořte ho. Potom nakonfigurujte MetadataSigning
položku metadat v technickém profilu vystavitele tokenu SAML. StorageReferenceId
musí odkazovat na název klíče zásady.
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<!-- SAML Token Issuer technical profile -->
<TechnicalProfile Id="Saml2AssertionIssuer">
<DisplayName>Token Issuer</DisplayName>
<Protocol Name="SAML2"/>
<OutputTokenFormat>SAML2</OutputTokenFormat>
...
<CryptographicKeys>
<Key Id="MetadataSigning" StorageReferenceId="B2C_1A_SamlMetadataCert"/>
...
</CryptographicKeys>
...
</TechnicalProfile>
Ladění protokolu SAML
Pokud chcete pomoct s konfigurací a laděním integrace s vaším poskytovatelem služeb, můžete použít rozšíření prohlížeče pro protokol SAML. Rozšíření prohlížeče zahrnují rozšíření SAML DevTools pro Chrome, SAML-tracer pro Firefox a Vývojářské nástroje pro Edge nebo Internet Explorer.
Pomocí těchto nástrojů můžete zkontrolovat integraci mezi vaší aplikací a Azure AD B2C. Příklad:
- Zkontrolujte, jestli požadavek SAML obsahuje podpis, a zjistěte, jaký algoritmus se používá k přihlášení k žádosti o autorizaci.
- Zkontrolujte, jestli Azure AD B2C vrací chybovou zprávu.
- Zkontrolujte, jestli je oddíl kontrolního výrazu zašifrovaný.
Další kroky
- Další informace o protokolu SAML najdete na webu OASIS.
- Získejte testovací webovou aplikaci SAML z úložiště komunity Azure AD B2C na GitHubu.