Freigeben über


UserInfo-Endpunkt

Bevor Sie beginnen, verwenden Sie die Auswahl eines Richtlinientyps oben auf dieser Seite, um den Typ der Richtlinie auszuwählen, die Sie einrichten. 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.

Der UserInfo-Endpunkt ist Teil der Spezifikation des OpenID Connect-Standards (OIDC) und für die Rückgabe von Ansprüchen über den authentifizierenden Benutzer konzipiert. Der UserInfo-Endpunkt wird in der Richtlinie der vertrauenden Seite mithilfe des Elements EndPoint definiert.

Dieses Feature ist nur für benutzerdefinierte Richtlinien verfügbar. Wählen Sie für die Einrichtungsschritte in der vorherigen Auswahl die Option Benutzerdefinierte Richtlinie aus.

Voraussetzungen

Übersicht über den UserInfo-Endpunkt

Die Benutzerinformationen „UserJourney“ geben Folgendes an:

  • Autorisierung: Der UserInfo-Endpunkt wird durch ein Bearertoken geschützt. Ein ausgestelltes Zugriffstoken wird dem UserInfo-Endpunkt im Autorisierungsheader präsentiert. Die Richtlinie gibt das technische Profil an, das das eingehende Token überprüft und Ansprüche extrahiert, z. B. die Objekt-ID (objectId) des Benutzers. Die Objekt-ID des Benutzers wird zum Abrufen der Ansprüche verwendet, die in der Antwort der UserInfo-Endpunktjourney zurückgegeben werden sollen.
  • Orchestrierungsschritt:
    • Ein Orchestrierungsschritt wird zum Erfassen von Informationen zum Benutzer verwendet. Basierend auf den Ansprüchen innerhalb des eingehenden Zugriffstokens ruft die User Journey ein technisches Microsoft Entra ID-Profil auf, um Daten zum Benutzer abzurufen (etwa Lesen des Benutzers nach objectId).
    • Optionale Orchestrierungsschritte: Sie können weitere Orchestrierungsschritte hinzufügen, etwa ein technisches REST-API-Profil, um weitere Informationen zum Benutzer abzurufen.
    • UserInfo-Aussteller: Gibt die Liste der Ansprüche an, die vom UserInfo-Endpunkt zurückgegeben werden.

Erstellen eines UserInfo-Endpunkts

1. Hinzufügen des technischen Profils für Tokenaussteller

  1. Öffnen Sie die Datei TrustFrameworkExtensions.xml.

  2. Falls es nicht bereits vorhanden ist, fügen Sie ein ClaimsProvider-Element und seine untergeordneten Elemente als erstes Element unter dem BuildingBlocks-Element hinzu.

  3. Fügen Sie den folgenden Anspruchsanbieter hinzu:

    <!-- 
    <ClaimsProviders> -->
      <ClaimsProvider>
        <DisplayName>Token Issuer</DisplayName>
        <TechnicalProfiles>
          <TechnicalProfile Id="UserInfoIssuer">
            <DisplayName>JSON Issuer</DisplayName>
            <Protocol Name="None" />
            <OutputTokenFormat>JSON</OutputTokenFormat>
            <CryptographicKeys>
              <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
            </CryptographicKeys>
            <!-- The Below claims are what will be returned on the UserInfo Endpoint if in the Claims Bag-->
            <InputClaims>
              <InputClaim ClaimTypeReferenceId="objectId"/>
              <InputClaim ClaimTypeReferenceId="givenName"/>
              <InputClaim ClaimTypeReferenceId="surname"/>
              <InputClaim ClaimTypeReferenceId="displayName"/>
              <InputClaim ClaimTypeReferenceId="signInNames.emailAddress"/>
            </InputClaims>
          </TechnicalProfile>
          <TechnicalProfile Id="UserInfoAuthorization">
            <DisplayName>UserInfo authorization</DisplayName>
            <Protocol Name="None" />
            <InputTokenFormat>JWT</InputTokenFormat>
            <Metadata>
              <!-- Update the Issuer and Audience below -->
              <!-- Audience is optional, Issuer is required-->
              <Item Key="issuer">https://yourtenant.b2clogin.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/</Item>
              <Item Key="audience">[ "00001111-aaaa-2222-bbbb-3333cccc4444", "11112222-bbbb-3333-cccc-4444dddd5555" ]</Item>
              <Item Key="client_assertion_type">urn:ietf:params:oauth:client-assertion-type:jwt-bearer</Item>
            </Metadata>
            <CryptographicKeys>
              <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
            </CryptographicKeys>
            <OutputClaims>
              <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
              <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email"/>
              <!-- Optional claims to read from the access token. -->
              <!-- <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name"/>
                 <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name"/>
                 <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name"/> -->
            </OutputClaims>
          </TechnicalProfile>
        </TechnicalProfiles>
      </ClaimsProvider>
    <!-- 
    </ClaimsProviders> -->
    
  4. Der Abschnitt „InputClaims“ im technischen Profil UserInfoIssuer gibt die Attribute an, die Sie zurückgeben möchten. Das technische Profil „UserInfoIssuer“ wird am Ende der User Journey aufgerufen.

  5. Das technische Profil UserInfoAuthorization überprüft die Signatur, den Ausstellernamen und die Tokenzielgruppe und extrahiert den Anspruch aus dem eingehenden Token. Ändern Sie die folgenden Metadaten entsprechend Ihrer Umgebung:

    1. issuer: Dieser Wert muss mit dem iss-Anspruch innerhalb des Zugriffstokenanspruchs identisch sein. Von Azure AD B2C ausgestellte Token verwenden einen Aussteller im Format https://yourtenant.b2clogin.com/your-tenant-id/v2.0/. Informieren Sie sich ausführlicher über die Tokenanpassung.

    2. IdTokenAudience: Dieser Wert muss mit dem aud-Anspruch innerhalb des Zugriffstokenanspruchs identisch sein. In Azure AD B2C ist der aud-Anspruch die ID der anspruchsbasierten Anwendung. Dieser Wert ist eine Auflistung und unterstützt mehrere Werte mit Kommatrennzeichen.

      Im folgenden Zugriffstoken lautet der Wert des iss-Anspruchs https://contoso.b2clogin.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/. Der Wert des aud-Anspruchs lautet 00001111-aaaa-2222-bbbb-3333cccc4444.

      {
        "exp": 1605549468,
        "nbf": 1605545868,
        "ver": "1.0",
        "iss": "https://contoso.b2clogin.com/11111111-1111-1111-1111-111111111111/v2.0/",
        "sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
        "acr": "b2c_1a_signup_signin",
        "nonce": "defaultNonce",
        "iat": 1605545868,
        "auth_time": 1605545868,
        "name": "John Smith",
        "given_name": "John",
        "family_name": "Smith",
        "tid": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
      }
      
  6. Das Element „OutputClaims“ des technischen Profils UserInfoAuthorization gibt die Attribute an, die Sie aus dem Zugriffstoken lesen möchten. ClaimTypeReferenceId ist der Verweis auf einen Anspruchstyp. PartnerClaimType (optional) ist der Name des im Zugriffstoken definierten Anspruchs.

2. Hinzufügen des UserJourney-Elements

Das UserJourney-Element definiert den Pfad, den der Benutzer beim Interagieren mit Ihrer Anwendung durchläuft. Fügen Sie das UserJourneys-Element hinzu (sofern es noch nicht vorhanden ist), und identifizieren Sie dabei die UserJourney als UserInfoJourney:

<!-- 
<UserJourneys> -->
  <UserJourney Id="UserInfoJourney" DefaultCpimIssuerTechnicalProfileReferenceId="UserInfoIssuer">
    <Authorization>
      <AuthorizationTechnicalProfiles>
        <AuthorizationTechnicalProfile ReferenceId="UserInfoAuthorization" />
      </AuthorizationTechnicalProfiles>
    </Authorization>
    <OrchestrationSteps >
      <OrchestrationStep Order="1" Type="ClaimsExchange">
        <Preconditions>
          <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
            <Value>objectId</Value>
            <Action>SkipThisOrchestrationStep</Action>
          </Precondition>
        </Preconditions>
        <ClaimsExchanges UserIdentity="false">
          <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
        </ClaimsExchanges>
      </OrchestrationStep>
      <OrchestrationStep Order="2" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="UserInfoIssuer" />
    </OrchestrationSteps>
  </UserJourney>
<!-- 
</UserJourneys> -->

3. Aufnehmen des Endpunkts in die Richtlinie der vertrauenden Seite

Fügen Sie der Datei SocialAndLocalAccounts/SignUpOrSignIn.xml ein Element vom Typ Endpoint hinzu, um den UserInfo-Endpunkt in die anspruchsbasierte Anwendung aufzunehmen.

<!--
<RelyingParty> -->
  <Endpoints>
    <Endpoint Id="UserInfo" UserJourneyReferenceId="UserInfoJourney" />
  </Endpoints>
<!-- 
</RelyingParty> -->

Das fertige Element der vertrauenden Seite sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="yourtenant.onmicrosoft.com" PolicyId="B2C_1A_signup_signin" PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_signup_signin">
  <BasePolicy>
    <TenantId>yourtenant.onmicrosoft.com</TenantId>
    <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId>
  </BasePolicy>
  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <Endpoints>
      <Endpoint Id="UserInfo" UserJourneyReferenceId="UserInfoJourney" />
    </Endpoints>
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="email" />
        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
        <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
      </OutputClaims>
      <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
  </RelyingParty>
</TrustFrameworkPolicy>

4. Hochladen der Dateien

  1. Melden Sie sich beim Azure-Portal 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. 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.
  4. Wählen Sie Framework für die Identitätsfunktion aus.
  5. Klicken Sie auf der Seite Benutzerdefinierte Richtlinien auf Upload custom policy (Benutzerdefinierte Richtlinie hochladen).
  6. Aktivieren Sie Benutzerdefinierte Richtlinie überschreiben, sofern bereits vorhanden, suchen Sie nach der Datei TrustframeworkExtensions.xml, und wählen Sie die Datei aus.
  7. Klicken Sie auf Hochladen.
  8. Wiederholen Sie die Schritte 5 bis 7 für die Datei der vertrauenden Seite, z.B. SignUpOrSignIn.xml.

Aufrufen des UserInfo-Endpunkts

Der UserInfo-Endpunkt verwendet die standardmäßige OAuth2-Bearertoken-API, die mithilfe des Zugriffstokens aufgerufen wird, das beim Abrufen eines Tokens für die Anwendung empfangen wurde. Sie gibt eine JSON-Antwort zurück, die Ansprüche über den Benutzer enthält. Der UserInfo-Endpunkt wird in Azure AD B2C unter folgender URL gehostet:

https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/policy-name/openid/v2.0/userinfo

Mit dem Konfigurationsendpunkt „/.well-known“ (OpenID Connect Discovery-Dokument) wird das Feld userinfo_endpoint aufgeführt. Sie können den UserInfo-Endpunkt mithilfe des Konfigurationsendpunkts „/.well-known“ unter folgender URL programmgesteuert ermitteln:

https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/policy-name/v2.0/.well-known/openid-configuration 

Testen der Richtlinie

  1. Wählen Sie unter Benutzerdefinierte Richtlinien die Richtlinie aus, mit der Sie den UserInfo-Endpunkt integriert haben. Beispiel: B2C_1A_SignUpOrSignIn
  2. Wählen Sie Jetzt ausführen aus.
  3. Wählen Sie unter Anwendung auswählen Ihre Anwendung aus, die Sie zuvor registriert haben. Wählen Sie für Antwort-URL die Option https://jwt.ms aus. Weitere Informationen finden Sie unter Tutorial: Registrieren einer Webanwendung in Azure Active Directory B2C.
  4. Sie können sich mit einer E-Mail-Adresse oder einem Social Media-Konto registrieren oder anmelden.
  5. Kopieren Sie auf der Website https://jwt.ms „id_token“ im codierten Format. Damit können Sie eine GET-Anforderung an den UserInfo-Endpunkt senden und die Benutzerinformationen abrufen.
  6. Senden Sie eine GET-Anforderung an den UserInfo-Endpunkt, und rufen Sie die Benutzerinformationen ab.
GET /yourtenant.onmicrosoft.com/b2c_1a_signup_signin/openid/v2.0/userinfo
Host: b2cninja.b2clogin.com
Authorization: Bearer <your access token>

Eine erfolgreiche Antwort sieht wie folgt aus:

{
    "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    "givenName": "John",
    "surname": "Smith",
    "displayName": "John Smith",
    "signInNames.emailAddress": "john.s@contoso.com"
}

Bereitstellen optionaler Ansprüche

Führen Sie die folgenden Schritte aus, um weitere Ansprüche bereitzustellen:

  1. Fügen Sie Benutzerattribute hinzu und passen Sie die Benutzereingabe an.

  2. Ändern Sie das OutputClaims-Element des technischen Profils der Richtlinie für die vertrauende Seite mit den Ansprüchen, die Sie bereitstellen möchten. Verwenden Sie das DefaultValue-Attribut, um einen Standardwert festzulegen. Sie können den Standardwert auch auf einen Anspruchskonfliktlöser wie {Context:CorrelationId} festlegen. Um die Verwendung des Standardwerts zu erzwingen, setzen Sie das AlwaysUseDefaultValue-Attribut auf true. Das folgende Beispiel fügt den Anspruch „city“ mit einem Standardwert hinzu.

    <RelyingParty>
      ...
      <TechnicalProfile Id="PolicyProfile">
        ...
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="city" DefaultValue="Berlin" />
        </OutputClaims>
        ...
      </TechnicalProfile>
    </RelyingParty>
    
  3. Ändern Sie das Element InputClaims des technischen Profils UserInfoIssuer mit den Ansprüchen, die Sie bereitstellen möchten. Verwenden Sie das PartnerClaimType-Attribut, um den Namen der Anspruchsrückgabe an Ihre App zu ändern. Im folgenden Beispiel wird der Anspruch „city“ hinzugefügt und der Name einiger Ansprüche geändert.

    <TechnicalProfile Id="UserInfoIssuer">
      ...
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="objectId" />
        <InputClaim ClaimTypeReferenceId="city" />
        <InputClaim ClaimTypeReferenceId="givenName" />
        <InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="familyName" />
        <InputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
        <InputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
      </InputClaims>
      ...
    </TechnicalProfile>
    

Nächste Schritte

  • Ein Beispiel für eine Richtlinie für den UserInfo-Endpunkt finden Sie auf GitHub.