Delen via


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, Sha512of 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 KeyDescriptoruse 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, Sha512of 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 Aes128en 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> de identifierUris waarde in het metagegevensbestand, zoals https://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. De relay-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:

  1. Download het door SAML-SP geïnitieerde aanmeldingsvoorbeeldbeleid.
  2. Werk TenantId bij zodat deze overeenkomt met de naam van uw tenant. In dit artikel wordt gebruikgemaakt van het voorbeeld contoso.b2clogin.com.
  3. 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, NotOnOrAfteren 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