Opties voor het registreren van een SAML-toepassing in Azure AD B2C
In dit artikel worden de configuratieopties beschreven die beschikbaar zijn wanneer u Azure Active Directory B2C (Azure AD B2C) verbindt met uw SAML-toepassing (Security Assertion Markup Language).
Voordat u begint, gebruikt u de selector Een beleidstype kiezen om het type beleid te kiezen dat u instelt. U kunt in Azure Active Directory B2C op twee manieren definiëren hoe gebruikers met uw toepassingen communiceren: via vooraf gedefinieerde gebruikersstromen of via volledig configureerbaar aangepast beleid. De stappen die in dit artikel zijn vereist, verschillen voor elke methode.
Deze functie is alleen beschikbaar voor aangepast beleid. Voor configuratiestappen selecteert u Aangepast beleid in de voorgaande selector.
Een SAML-antwoordhandtekening opgeven
U kunt een certificaat opgeven dat moet worden gebruikt om de SAML-berichten te ondertekenen. Het bericht is het <samlp:Response>
element in het SAML-antwoord dat naar de toepassing is verzonden.
Als u nog geen beleidssleutel hebt, maakt u er een. Configureer vervolgens het SamlMessageSigning
metagegevensitem in het technische profiel SAML-tokenverlener.
StorageReferenceId
moet verwijzen naar de naam van de beleidssleutel.
<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>
Handtekening-algoritme
U kunt het handtekeningalgoritme configureren dat wordt gebruikt om de SAML-assertie te ondertekenen. Mogelijke waarden zijn Sha256
, Sha384
, Sha512
of Sha1
. Zorg ervoor dat het technische profiel en de toepassing hetzelfde handtekening-algoritme gebruiken. Gebruik slechts het algoritme dat door uw certificaat wordt ondersteund.
Configureer het handtekening-algoritme met behulp van de XmlSignatureAlgorithm
metagegevenssleutel in het relying party-element Metadata
.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="XmlSignatureAlgorithm">Sha256</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Controleer de SAML-assertiehandtekening
Wanneer uw toepassing verwacht dat de sectie SAML-assertie is ondertekend, moet de SAML-serviceprovider de WantAssertionsSigned
instellen op true
. Als deze is ingesteld op false
of niet bestaat, wordt de assertiesectie niet ondertekend.
In het volgende voorbeeld ziet u metagegevens voor een SAML-serviceprovider, met WantAssertionsSigned
ingesteld op 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>
Handtekeningcertificaat
Uw beleid moet een certificaat opgeven dat moet worden gebruikt om de sectie SAML-asserties van het SAML-antwoord te ondertekenen. Als u nog geen beleidssleutel hebt, maakt u er een. Configureer vervolgens het SamlAssertionSigning
metagegevensitem in het technische profiel SAML-tokenverlener.
StorageReferenceId
moet verwijzen naar de naam van de beleidssleutel.
<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>
Versleuteling in SAML-asserties inschakelen
Wanneer uw toepassing verwacht dat SAML-asserties een versleutelde indeling hebben, moet u ervoor zorgen dat versleuteling is ingeschakeld in het Azure AD B2C-beleid.
Azure AD B2C gebruikt het openbare sleutelcertificaat van de serviceprovider om de SAML-assertie te versleutelen. De openbare sleutel moet bestaan in het eindpunt voor metagegevens van de SAML-toepassing met de KeyDescriptor
use
waarde ingesteld op Encryption
, zoals wordt weergegeven in het volgende voorbeeld:
<KeyDescriptor use="encryption">
<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>valid certificate</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
Als u wilt dat Azure AD B2C versleutelde asserties verzendt, stelt u het WantsEncryptedAssertion
metagegevensitem in op true
in het technische profiel van de relying party. U kunt ook het algoritme configureren dat wordt gebruikt om de SAML-assertie te versleutelen.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="WantsEncryptedAssertions">true</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Versleutelingsmethode
Als u de versleutelingsmethode wilt configureren die wordt gebruikt om de SAML-assertiegegevens te versleutelen, stelt u de DataEncryptionMethod
metagegevenssleutel in de relying party in. Mogelijke waarden zijn Aes256
(standaard), Aes192
, Sha512
of Aes128
. De metagegevens bepalen de waarde van het <EncryptedData>
element in het SAML-antwoord.
Als u de versleutelingsmethode wilt configureren voor het versleutelen van de kopie van de sleutel die is gebruikt voor het versleutelen van de SAML-assertiegegevens, stelt u de KeyEncryptionMethod
metagegevenssleutel in de relying party in. Mogelijke waarden zijn:
-
Rsa15
(standaard): RSA PKCS Versie 1.5-algoritme (Public Key Cryptography Standard). -
RsaOaep
: RSA OAEP-versleutelingsalgoritmen (Optimal Asymmetric Encryption Padding).
De metagegevens bepalen de waarde van het <EncryptedKey>
element in het SAML-antwoord.
In het volgende voorbeeld ziet u de EncryptedAssertion
sectie van een SAML-assertie. De versleutelde gegevensmethode is Aes128
en de versleutelde sleutelmethode is 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>
U kunt de indeling van de versleutelde asserties wijzigen. Als u de versleutelingsindeling wilt configureren, stelt u de UseDetachedKeys
metagegevenssleutel in de Relying Party in. Mogelijke waarden: true
of false
(standaard). Wanneer de waarde is ingesteld op true
, voegen de losgekoppelde sleutels de versleutelde assertie toe als een onderliggend element van EncryptedAssertion
in plaats van EncryptedData
.
Configureer de versleutelingsmethode en -indeling met behulp van de metagegevenssleutels in het technische profiel van relying party:
<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>
Door IdP geïnitieerde stroom configureren
Wanneer uw toepassing verwacht een SAML-assertie te ontvangen zonder eerst een SAML AuthN-aanvraag te verzenden naar de id-provider (IdP), moet u Azure AD B2C configureren voor door IdP geïnitieerde stroom.
In door IdP geïnitieerde stroom start de id-provider (Azure AD B2C) het aanmeldingsproces. De id-provider stuurt een ongevraagd SAML-antwoord naar de serviceprovider (uw relying party-toepassing).
We bieden momenteel geen ondersteuning voor scenario's waarin de initiërende id-provider een externe id-provider is die is gefedereerd met Azure AD B2C, zoals Active Directory Federation Services of Salesforce. Door IdP geïnitieerde stroom wordt alleen ondersteund voor verificatie van lokale accounts in Azure AD B2C.
Als u de door IdP geïnitieerde stroom wilt inschakelen, stelt u het IdpInitiatedProfileEnabled
metagegevensitem in op true
in het technische profiel van relying party.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="SAML2"/>
<Metadata>
<Item Key="IdpInitiatedProfileEnabled">true</Item>
</Metadata>
..
</TechnicalProfile>
</RelyingParty>
Gebruik de volgende URL om een gebruiker aan te melden of te registreren via een door IdP geïnitieerde stroom:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/generic/login?EntityId=<app-identifier-uri>&RelayState=<relay-state>
Vervang de volgende waarden:
- Vervang door
<tenant-name>
de naam van uw tenant. - Vervang door
<policy-name>
de naam van uw SAML relying party-beleid. - Vervang door
<app-identifier-uri>
deidentifierUris
waarde in het metagegevensbestand, zoalshttps://contoso.onmicrosoft.com/app-name
. - [Optioneel] vervang door
<relay-state>
een waarde die is opgenomen in de autorisatieaanvraag die ook wordt geretourneerd in het tokenantwoord. Derelay-state
parameter wordt gebruikt voor het coderen van informatie over de status van de gebruiker in de app voordat de verificatieaanvraag plaatsvond, zoals de pagina waarop deze zich bevonden.
Voorbeeldbeleid
U kunt een volledig voorbeeldbeleid gebruiken voor testen met de SAML-test-app:
- Download het door SAML-SP geïnitieerde aanmeldingsvoorbeeldbeleid.
- Werk
TenantId
bij zodat deze overeenkomt met de naam van uw tenant. In dit artikel wordt gebruikgemaakt van het voorbeeld contoso.b2clogin.com. - Houd de beleidsnaam B2C_1A_signup_signin_saml.
De levensduur van het SAML-antwoord configureren
U kunt configureren hoe lang het SAML-antwoord geldig blijft. Stel de levensduur in met behulp van het TokenLifeTimeInSeconds
metagegevensitem in het technische profiel SAML-tokenverlener. Deze waarde is het aantal seconden dat kan verstrijken vanaf het NotBefore
tijdstempel, berekend op de tijdstempel van de tokenuitgiftetijd. De standaardlevensduur is 300 seconden (vijf minuten).
<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>
Het tijdverschil van een SAML-antwoord configureren
U kunt het tijdverschil configureren dat wordt toegepast op de SAML-responstijdstempel NotBefore
. Deze configuratie zorgt ervoor dat als de tijden tussen twee platforms niet zijn gesynchroniseerd, de SAML-assertie nog steeds als geldig wordt beschouwd wanneer deze binnen deze tijd scheef is.
Stel het tijdsverschil in met behulp van het TokenNotBeforeSkewInSeconds
metagegevensitem in het technische profiel SAML-tokenverlener. De scheefheidswaarde wordt in seconden opgegeven, met een standaardwaarde van 0. De maximumwaarde is 3600 (één uur).
Bijvoorbeeld wanneer TokenNotBeforeSkewInSeconds
is ingesteld op 120
seconden:
- Het token wordt uitgegeven om 13:05:10 UTC.
- Het token is geldig vanaf 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>
Milliseconden verwijderen van de datum en tijd
U kunt opgeven of milliseconden worden verwijderd uit datum- en tijdwaarden in het SAML-antwoord. (Deze waarden omvatten IssueInstant
, NotBefore
, NotOnOrAfter
en AuthnInstant
.) Als u de milliseconden wilt verwijderen, stelt u de RemoveMillisecondsFromDateTime
metagegevenssleutel in de relying party in. Mogelijke waarden: false
(standaard) of 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>
Een verlener-id gebruiken om de URI van een verlener te overschrijven
Als u meerdere SAML-toepassingen hebt die afhankelijk zijn van verschillende entityID
waarden, kunt u de IssuerUri
waarde in uw relying party-bestand overschrijven. Als u de URI van de verlener wilt overschrijven, kopieert u het technische profiel met de Saml2AssertionIssuer
id uit het basisbestand en overschrijft u de IssuerUri
waarde.
Tip
Kopieer de <ClaimsProviders>
sectie van de basis en behoud deze elementen binnen de claimprovider: <DisplayName>Token Issuer</DisplayName>
, <TechnicalProfile Id="Saml2AssertionIssuer">
en <DisplayName>Token Issuer</DisplayName>
.
Voorbeeld:
<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>
…
Een sessie beheren
U kunt de sessie tussen Azure AD B2C en de SAML Relying Party-toepassing beheren met behulp van het UseTechnicalProfileForSessionManagement
element en de SamlSSOSessionProvider.
Gebruikers dwingen zich opnieuw te verifiëren
Als u gebruikers wilt dwingen om opnieuw te verifiëren, kan de toepassing het ForceAuthn
kenmerk opnemen in de SAML-verificatieaanvraag. Het ForceAuthn
kenmerk is een Booleaanse waarde. Wanneer deze is ingesteld op true
, wordt de sessie van de gebruiker ongeldig gemaakt op Azure AD B2C en wordt de gebruiker gedwongen opnieuw te verifiëren.
De volgende SAML-verificatieaanvraag laat zien hoe u het ForceAuthn
kenmerk instelt op true
.
<samlp:AuthnRequest
Destination="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_SAML2_signup_signin/samlp/sso/login"
ForceAuthn="true" ...>
...
</samlp:AuthnRequest>
De Azure AD B2C IdP SAML-metagegevens ondertekenen
U kunt Azure AD B2C instrueren om het metagegevensdocument voor de SAML-id-provider te ondertekenen, als de toepassing dit vereist. Als u nog geen beleidssleutel hebt, maakt u er een. Configureer vervolgens het MetadataSigning
metagegevensitem in het technische profiel SAML-tokenverlener.
StorageReferenceId
moet verwijzen naar de naam van de beleidssleutel.
<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>
Fouten opsporen in het SAML-protocol
Als u de integratie met uw serviceprovider wilt configureren en fouten wilt opsporen, kunt u een browserextensie voor het SAML-protocol gebruiken. Browserextensies omvatten de SAML DevTools-extensie voor Chrome, SAML-tracer voor Firefox en Ontwikkelhulpprogramma's voor Edge of Internet Explorer.
Met behulp van deze hulpprogramma's kunt u de integratie tussen uw toepassing en Azure AD B2C controleren. Bijvoorbeeld:
- Controleer of de SAML-aanvraag een handtekening bevat en bepaal welk algoritme wordt gebruikt om de autorisatieaanvraag aan te melden.
- Controleer of Azure AD B2C een foutbericht retourneert.
- Controleer of de assertiesectie is versleuteld.
Volgende stappen
- Meer informatie over het SAML-protocol vindt u op de OASIS-website.
- Haal de SAML-testweb-app op uit de Azure AD B2C GitHub-communityopslagplaats.