Einrichten der Anmeldung und des Logins mit generischem OpenID Connect unter Verwendung von Azure Active Directory B2C

Bevor Sie beginnen, verwenden Sie den Auswahlpunkt Richtlinientyp wählen, um die Art der Richtlinie auszuwählen, die Sie einrichten möchten. Azure Active Directory B2C bietet zwei Methoden zum Definieren der Benutzerinteraktion mit Ihren Anwendungen: vordefinierte Benutzerflows oder vollständig konfigurierbare benutzerdefinierte Richtlinien. Die Schritte, die in diesem Artikel erforderlich sind, unterscheiden sich für jede Methode.

OpenID Connect ist ein Authentifizierungsprotokoll auf Grundlage von OAuth 2.0, das für die sichere Anmeldung von Benutzern verwendet werden kann. Die meisten Identitätsanbieter, die dieses Protokoll verwenden, werden in Azure AD B2C unterstützt.

In diesem Artikel wird erläutert, wie Sie benutzerdefinierte OpenID Connect-Identitätsanbieter zu Ihren Benutzerflows hinzufügen können.

Wichtig

Ihre Endpunkte müssen die Azure AD B2C-Sicherheitsanforderungen erfüllen. Ältere TLS-Versionen und Verschlüsselungsverfahren sind veraltet. Weitere Informationen finden Sie unter Azure Active Directory B2C TLS- und Cipher Suite-Anforderungen.

Voraussetzungen

Hinzufügen des Identitätsanbieters

  1. Melden Sie sich beim Azure-Portal als globaler Administrator Ihres Azure AD B2C-Mandanten an.
  2. Wenn Sie Zugriff auf mehrere Mandanten haben, wählen Sie das Symbol Einstellungen im Menü oben aus, um über das Menü Verzeichnisse + Abonnements zu Ihrem Azure AD B2C-Mandanten zu wechseln.
  3. Klicken Sie links oben im Azure-Portal auf Alle Dienste, suchen Sie nach Azure AD B2C, und klicken Sie darauf.
  4. Wählen Sie Identitätsanbieter und dann Neuer OpenID Connect-Anbieter aus.
  5. Geben Sie einen Namen ein. Geben Sie beispielsweise Contoso ein.

Definieren Sie den OpenId Connect Identitätsanbieter, indem Sie ihn zum ClaimsProviders Element in der Erweiterungsdatei Ihrer Richtlinie hinzufügen.

  1. Öffnen Sie die Datei TrustFrameworkExtensions.xml.

  2. Suchen Sie nach dem Element ClaimsProviders. Falls das Element nicht vorhanden sein sollte, fügen Sie es unter dem Stammelement hinzu.

  3. Fügen Sie ein neues ClaimsProvider-Element wie folgt hinzu:

    <ClaimsProvider>
      <Domain>contoso.com</Domain>
      <DisplayName>Login with Contoso</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Contoso-OpenIdConnect">
          <DisplayName>Contoso</DisplayName>
          <Description>Login with your Contoso account</Description>
          <Protocol Name="OpenIdConnect"/>
          <Metadata>
            <Item Key="METADATA">https://your-identity-provider.com/.well-known/openid-configuration</Item>
            <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item>
            <Item Key="response_types">code</Item>
            <Item Key="scope">openid profile</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">false</Item>
          </Metadata>
          <!-- <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/>
          </CryptographicKeys> -->
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/>
            <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/>
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
            <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" />
            <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid"/>
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    

Konfigurieren des Identitätsanbieters

Jeder OpenID Connect-Identitätsanbieter beschreibt ein Metadatendokument, das den Großteil der erforderlichen Informationen für die Anmeldung enthält. Das Metadaten-Dokument enthält Informationen wie die zu verwendenden URLs und den Speicherort der öffentlichen Signierschlüssel des Dienstes. Das OpenID Connect-Metadatendokument befindet sich immer an einem Endpunkt, der in .well-known/openid-configuration endet. Geben Sie für den OpenID Connect-Identitätsanbieter, den Sie hinzufügen möchten, die Metadaten-URL ein.

Geben Sie im Feld Metadaten url die URL des OpenID Connect-Metadaten-Dokuments ein.

Geben Sie in den <Item Key="METADATA">Metadaten des technischen Profils die URL des OpenID Connect-Metadatendokuments ein.

Client-ID und Geheimnis

Damit Benutzer sich anmelden können, setzt der Identitätsanbieter voraus, dass Entwickler eine Anwendung in ihrem Dienst registrieren. Diese Anwendung verfügt über eine ID, die als die Client-ID und ein Clientgeheimnis bezeichnet wird.

Das Clientgeheimnis ist optional. Sie müssen jedoch ein Client-Geheimnis angeben, wenn der Antworttypcode ist, der das Geheimnis zum Austausch des Codes für das Token verwendet.

Um die Client-ID und das Client-Geheimnis hinzuzufügen, kopieren Sie diese Werte vom Identitätsanbieter und geben sie in die entsprechenden Felder ein.

Geben Sie in den Metadaten des technischen Profils <Item Key="client_id"> die Client-ID ein.

Erstellen eines Richtlinienschlüssels

Wenn das Kundengeheimnis erforderlich ist, speichern Sie das Kundengeheimnis, das Sie zuvor in Ihrem Azure AD B2C-Tenant gespeichert haben.

  1. Melden Sie sich beim Azure-Portal an.

  2. Stellen Sie sicher, dass Sie das Verzeichnis verwenden, das Ihren Azure AD B2C-Mandanten enthält. Wählen Sie den Filter Verzeichnis + Abonnement in der Symbolleiste des Portals.

  3. Suchen Sie auf der Seite Portaleinstellungen > Verzeichnisse und Abonnements das Azure AD B2C-Verzeichnis in der Liste Verzeichnisname, und klicken Sie dann auf Wechseln.

  4. Wählen Sie links oben im Azure-Portal die Option Alle Dienste aus, suchen Sie nach Azure AD B2C, und wählen Sie dann diese Option aus.

  5. Wählen Sie auf der Seite „Übersicht“ die Option Framework für die Identitätsfunktion aus.

  6. Klicken Sie erst auf Richtlinienschlüssel und anschließend auf Hinzufügen.

  7. Klicken Sie unter Optionen auf Manual.

  8. Geben Sie einen Namen für den Richtlinienschlüssel ein. Beispiel: ContosoSecret. Dem Namen Ihres Schlüssels wird automatisch das Präfix B2C_1A_ hinzugefügt.

  9. Geben Sie im Feld Geheimnis den geheimen Clientschlüssel ein, den Sie zuvor notiert haben.

  10. Wählen Sie für Schlüsselverwendung die Option Signature aus.

  11. Klicken Sie auf Erstellen.

  12. Im CryptographicKeys XML-Element fügen Sie das folgende Element hinzu:

    <CryptographicKeys>
      <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoSecret"/>
    </CryptographicKeys>
    

Bereich

Der Bereich definiert die Informationen und Berechtigungen, die Sie bei Ihrem Identitätsanbieter sammeln möchten, z. B. openid profile. Um das ID-Token vom Identitätsanbieter zu erhalten, muss der openid-Bereich angegeben werden.

Ohne das ID-Token können Benutzer sich nicht mit dem benutzerdefinierten Identitätsanbieter bei Azure AD B2C anmelden. Andere Bereiche können (durch Leerzeichen getrennt) angefügt werden. Entnehmen Sie der Dokumentation des benutzerdefinierten Identitätsanbieters, welche anderen Bereiche möglicherweise zur Verfügung stehen.

Geben Sie in den Feldern Scope die Bereiche des Identitätsanbieters ein. Beispiel: openid profile.

Geben Sie in den <Item Key="scope"> technischen Profil-Metadaten die Bereiche des Identitätsanbieters ein. Beispiel: openid profile.

Antworttyp

Der Antworttyp beschreibt, welche Art von Informationen beim ersten Aufruf von authorization_endpoint des benutzerdefinierten Identitätsanbieters zurückgesendet werden. Die folgenden Antworttypen können verwendet werden:

  • code: Gemäß dem Autorisierungscodefluss wird ein Code an Azure AD B2C zurückgegeben. Azure AD B2C fährt damit fort, den token_endpoint für den Austausch des Codes für das Token aufzurufen.
  • id_token: Ein ID-Token wird vom benutzerdefinierten Identitätsanbieter an Azure AD B2C zurückgegeben.

Wählen Sie unter Antworttyp je nach den Einstellungen Ihres Identitätsanbieters code oder id_token.

Wählen Sie in den <Item Key="response_types">Metadaten des technischen Profils je nach den Einstellungen Ihres Identitätsanbieters code oder id_token.

Antwortmodus

Der Antwortmodus definiert die Methode, die zum Senden der Daten vom benutzerdefinierten Identitätsanbieter zurück zu Azure AD B2C verwendet werden sollte. Die folgenden Modi können für die Antwort verwendet werden:

  • form_post: Dieser Antwortmodus wird für die optimale Sicherheit empfohlen. Die Antwort wird mit der HTTP-POST-Methode übertragen, wobei Code oder Token im application/x-www-form-urlencoded-Format codiert wird.
  • query: Der Code oder das Token wird als Abfrageparameter zurückgegeben.

Wählen Sie unter Antwortmodus je nach den Einstellungen Ihres Identitätsanbieters form_post oder query.

Wählen Sie in den <Item Key="response_mode">Metadaten des technischen Profils form_post oder query, je nach den Einstellungen Ihres Identitätsanbieters.

Domänenhinweis

Der Domänen-Hinweis kann verwendet werden, um direkt zur Anmeldeseite des angegebenen Identitätsanbieters zu springen, anstatt den Benutzer eine Auswahl aus der Liste der verfügbaren Identitätsanbieter treffen zu lassen.

Um diese Art von Verhalten zu ermöglichen, geben Sie einen Wert für den Domänenhinweis ein. Um direkt zum benutzerdefinierten Identitätsanbieter zu wechseln, fügen Sie den Parameter domain_hint=<domain hint value> beim Aufrufen von Azure AD B2C für die Anmeldung am Ende Ihrer Anforderung an.

Geben Sie im Element Domain-Hinweis einen im Domain-Hinweis verwendeten Domain-Namen ein.

Geben Sie im XML-Element <Domain>contoso.com</Domain>Technisches Profil einen Domänennamen ein, der im Domänenhinweis verwendet wird. Beispiel: contoso.com.

Anspruchszuordnung

Nachdem der benutzerdefinierte Identitätsanbieter ein ID-Token an Azure AD B2C zurückgesendet hat, muss Azure AD B2C in der Lage sein, die Ansprüche aus dem empfangenen Token den Ansprüchen zuzuordnen, die Azure AD B2C erkennt und verwendet. Ziehen Sie für jede der folgenden Zuordnungen die Dokumentation des benutzerdefinierten Identitätsanbieters zu Rate, um die Ansprüche zu verstehen, die in den Token des Identitätsanbieters zurückgegeben werden:

  • Benutzer-ID: Geben Sie den Anspruch ein, der den eindeutigen Bezeichner für den angemeldeten Benutzer bereitstellt.
  • Anzeigename: Geben Sie den Anspruch ein, der den Anzeigenamen oder den vollständigen Namen des Benutzers bereitstellt.
  • Vorname: Geben Sie den Anspruch ein, der den Vornamen des Benutzers bereitstellt.
  • Nachname: Geben Sie den Anspruch ein, der den Nachnamen des Benutzers bereitstellt.
  • E-Mail: Geben Sie den Anspruch ein, der die E-Mail-Adresse des Benutzers bereitstellt.

Das Element OutputClaims enthält eine Liste der von Ihrem Identitätsanbieter zurückgegebenen Ansprüche. Ordnen Sie den Namen des Anspruchs, der in Ihrer Richtlinie definiert ist, dem im Identitätsanbieter definierten Namen zu. Konfigurieren Sie unter dem Element <OutputClaims> das Attribut PartnerClaimType mit dem entsprechenden Namen des Anspruchs, wie er von Ihrem Identitätsanbieter definiert wurde.

ClaimTypeReferenceId PartnerClaimType
issuerUserId Geben Sie den Anspruch ein, der den eindeutigen Bezeichner für den angemeldeten Benutzer bereitstellt.
displayName Geben Sie den Anspruch ein, der den Anzeigenamen oder den vollständigen Namen des Benutzers bereitstellt.
givenName Geben Sie den Anspruch ein, der den Vornamen des Benutzers bereitstellt.
surName Geben Sie den Anspruch ein, der den Nachnamen des Benutzers bereitstellt.
email Geben Sie den Anspruch ein, der die E-Mail-Adresse des Benutzers bereitstellt.
identityProvider Geben Sie den Claim ein, der den Namen des Token-Ausstellers enthält. Beispiel: iss. Wenn der Identitätsanbieter den Ausstelleranspruch nicht in das Token aufnimmt, setzen Sie das DefaultValue-Attribut mit einem eindeutigen Bezeichner Ihres Identitätsanbieters. Beispiel: DefaultValue="contoso.com".

Hinzufügen des Identitätsanbieters zu einem Benutzerflow

  1. Wählen Sie in Ihrem Azure AD B2C-Mandanten die Option Benutzerflows aus.
  2. Klicken Sie auf den Benutzerflow, dem Sie den Identitätsanbieter hinzufügen möchten.
  3. Wählen Sie unter Soziales Netzwerk als Identitätsanbieterden Identitätsanbieter aus, den Sie hinzugefügt haben. Zum Beispiel Contoso.
  4. Wählen Sie Speichern aus.

Testen des Benutzerflows

  1. Um die Richtlinie zu testen, wählen Sie Benutzerflow ausführen aus.
  2. Wählen Sie für Anwendung die Webanwendung testapp1 aus, die Sie zuvor registriert haben. Als Antwort-URL sollte https://jwt.ms angezeigt werden.
  3. Wählen Sie die Schaltfläche Benutzerflow ausführen aus.
  4. Wählen Sie auf der Registrierungs- oder Anmeldeseite den Identitätsanbieter aus, den Sie anmelden möchten. Zum Beispiel Contoso.

Wenn der Anmeldevorgang erfolgreich verlaufen ist, wird der Browser an https://jwt.ms umgeleitet und dadurch der Inhalt des von Azure AD B2C zurückgegebenen Tokens angezeigt.

Hinzufügen einer User Journey

Der Identitätsanbieter wurde nun eingerichtet, aber er ist noch auf keiner der Anmeldeseiten verfügbar. Wenn Sie nicht über eine eigene benutzerdefinierte User Journey verfügen, erstellen Sie ein Duplikat einer vorhandenen User Journey-Vorlage, und fahren Sie andernfalls mit dem nächsten Schritt fort.

  1. Öffnen Sie die Datei TrustFrameworkBase.xml aus dem Starter Pack.
  2. Suchen und kopieren Sie den gesamten Inhalt des UserJourney-Elements, das Id="SignUpOrSignIn" enthält.
  3. Öffnen Sie die Datei TrustFrameworkExtensions.xml, und suchen Sie nach dem UserJourneys-Element. Wenn das Element nicht vorhanden ist, fügen Sie ein solches hinzu.
  4. Fügen Sie den gesamten Inhalt des kopierten UserJourney-Element als untergeordnetes Element des UserJourneys-Elements ein.
  5. Benennen Sie die ID der User Journey um. Beispiel: Id="CustomSignUpSignIn".

Hinzufügen des Identitätsanbieters zu einer User Journey

Nachdem Sie nun über eine User Journey verfügen, fügen Sie den neuen Identitätsanbieter der User Journey hinzu. Fügen Sie zunächst eine Anmeldeschaltfläche hinzu, und verknüpfen Sie dann die Schaltfläche mit einer Aktion. Die Aktion ist das technische Profil, das Sie zuvor erstellt haben.

  1. Suchen Sie nach dem Orchestrierungsschrittelement, das Type="CombinedSignInAndSignUp" enthält, oder Type="ClaimsProviderSelection" in der User Journey. Dies ist in der Regel der erste Orchestrierungsschritt. Das ClaimsProviderSelections-Element enthält eine Liste mit Identitätsanbietern, mit denen sich ein Benutzer anmelden kann. Die Reihenfolge der Elemente gibt die Reihenfolge der Anmeldeschaltflächen vor, die dem Benutzer angezeigt werden. Fügen Sie ein ClaimsProviderSelection-XML-Element hinzu. Legen Sie für TargetClaimsExchangeId einen Anzeigenamen fest.

  2. Fügen Sie im nächsten Orchestrierungsschritt ein ClaimsExchange-Element hinzu. Legen Sie die ID auf den Wert der Zielanspruchs-Austausch-ID fest. Ändern Sie den Wert von TechnicalProfileReferenceId in die ID des technischen Profils, das Sie zuvor erstellt haben.

Der folgende XML-Code veranschaulicht die ersten beiden Orchestrierungsschritte einer User Journey mit dem Identitätsanbieter:

<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
  <ClaimsProviderSelections>
    ...
    <ClaimsProviderSelection TargetClaimsExchangeId="ContosoExchange" />
  </ClaimsProviderSelections>
  ...
</OrchestrationStep>

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="Contoso-OpenIdConnect" />
  </ClaimsExchanges>
</OrchestrationStep>

Konfigurieren einer Richtlinie für die vertrauende Seite

Die Richtlinie für die vertrauende Seite (z. B. SignUpSignIn.xml) gibt die User Journey an, die Azure AD B2C ausführt. Suchen Sie das DefaultUserJourney-Element in Vertrauende Seite. Aktualisieren Sie ReferenceId auf die ID der User Journey, in der Sie den Identitätsanbieter hinzugefügt haben.

Im folgenden Beispiel wird die ReferenceId für die User Journey CustomSignUpSignIn auf CustomSignUpSignIn festgelegt:

<RelyingParty>
  <DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
  ...
</RelyingParty>

Hochladen der benutzerdefinierten Richtlinie

  1. Melden Sie sich beim Azure-Portal an.
  2. Wählen Sie auf der Symbolleiste des Portals das Symbol Verzeichnis und Abonnement aus, und wählen Sie dann das Verzeichnis aus, das Ihren Azure AD B2C-Mandanten enthält.
  3. Suchen Sie im Azure-Portal nach Azure AD B2C, und wählen Sie diese Option dann aus.
  4. Wählen Sie unter Richtlinien die Option Identity Experience Framework aus.
  5. Wählen Sie Benutzerdefinierte Richtlinie hochladen aus, und laden Sie dann die beiden geänderten Richtliniendateien in der folgenden Reihenfolge hoch: zuerst die Erweiterungsrichtlinie (z. B. TrustFrameworkExtensions.xml) und dann die Richtlinie für die vertrauende Seite (z. B. SignUpSignIn.xml).
  1. Wählen Sie die Richtliniendatei für die vertrauende Seite aus, z. B. B2C_1A_signup_signin.
  2. Wählen Sie für Anwendung eine Webanwendung aus, die Sie zuvor registriert haben. Als Antwort-URL sollte https://jwt.ms angezeigt werden.
  3. Wählen Sie die Schaltfläche Jetzt ausführen aus.
  4. Wählen Sie auf der Registrierungs- oder Anmeldeseite Contoso, um sich mit einem Google-Konto anzumelden.

Wenn der Anmeldevorgang erfolgreich verlaufen ist, wird der Browser an https://jwt.ms umgeleitet und dadurch der Inhalt des von Azure AD B2C zurückgegebenen Tokens angezeigt.

Bekannte Probleme

  • Azure AD B2C unterstützt keine JWE (JSON-Webverschlüsselung) für den Austausch verschlüsselter Token mit OpenID-Verbindungsidentitätsanbietern.

Nächste Schritte

Weitere Informationen finden Sie im OpenId Connect technischen Profil Referenzhandbuch.