Udostępnij za pośrednictwem


Punkt końcowy informacji o użytkowniku

Przed rozpoczęciem użyj selektora Wybierz typ zasad w górnej części tej strony, aby wybrać typ konfigurowanych zasad. Usługa Azure Active Directory B2C oferuje dwie metody definiowania sposobu interakcji użytkowników z aplikacjami: za pomocą wstępnie zdefiniowanych przepływów użytkowników lub w pełni konfigurowalnych zasad niestandardowych. Kroki wymagane w tym artykule są różne dla każdej metody.

Punkt końcowy UserInfo jest częścią specyfikacji OpenID Połączenie standard (OIDC) i jest przeznaczony do zwracania oświadczeń dotyczących uwierzytelnionego użytkownika. Punkt końcowy UserInfo jest zdefiniowany w zasadach jednostki uzależnionej przy użyciu elementu EndPoint .

Ta funkcja jest dostępna tylko dla zasad niestandardowych. Aby uzyskać instrukcje konfiguracji, wybierz pozycję Zasady niestandardowe w poprzednim selektorze.

Wymagania wstępne

Omówienie punktu końcowego UserInfo

Informacje o użytkowniku UserJourney określa:

  • Autoryzacja: punkt końcowy UserInfo jest chroniony tokenem elementu nośnego. Wystawiony token dostępu jest wyświetlany w nagłówku autoryzacji do punktu końcowego UserInfo. Zasady określają profil techniczny, który weryfikuje token przychodzący i wyodrębnia oświadczenia, takie jak objectId użytkownika. ObjectId użytkownika służy do pobierania oświadczeń, które mają zostać zwrócone w odpowiedzi na podróż punktu końcowego UserInfo.
  • Krok orkiestracji:
    • Krok aranżacji służy do zbierania informacji o użytkowniku. Na podstawie oświadczeń w tokenie dostępu przychodzącego podróż użytkownika wywołuje profil techniczny Microsoft Entra ID w celu pobrania danych o użytkowniku, na przykład odczytując użytkownika za pomocą identyfikatora objectId.
    • Opcjonalne kroki orkiestracji — możesz dodać więcej kroków aranżacji, takich jak profil techniczny interfejsu API REST, aby uzyskać więcej informacji o użytkowniku.
    • UserInfo Issuer — określa listę oświadczeń zwracanych przez punkt końcowy UserInfo.

Tworzenie punktu końcowego UserInfo

1. Dodawanie profilu technicznego wystawcy tokenu

  1. Otwórz plik TrustFrameworkExtensions.xml.

  2. Jeśli jeszcze nie istnieje, dodaj element ClaimsProvider i jego elementy podrzędne jako pierwszy element w elemecie BuildingBlocks.

  3. Dodaj następującego dostawcę oświadczeń:

    <!-- 
    <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/11111111-1111-1111-1111-111111111111/v2.0/</Item>
              <Item Key="audience">[ "22222222-2222-2222-2222-222222222222", "33333333-3333-3333-3333-333333333333" ]</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. Sekcja InputClaims w profilu technicznym UserInfoIsssuer określa atrybuty, które chcesz zwrócić. Profil techniczny UserInfoIssuer jest wywoływany na końcu podróży użytkownika.

  5. Profil techniczny UserInfoAuthorization weryfikuje podpis, nazwę wystawcy i odbiorców tokenu oraz wyodrębnia oświadczenie z tokenu przychodzącego. Zmień następujące metadane, aby odzwierciedlić środowisko:

    1. wystawca — ta wartość musi być identyczna iss z oświadczeniem w ramach oświadczenia tokenu dostępu. Tokeny wystawione przez usługę Azure AD B2C używają wystawcy w formacie https://yourtenant.b2clogin.com/your-tenant-id/v2.0/. Dowiedz się więcej o dostosowywaniu tokenu.

    2. IdTokenAudience — musi być identyczna z aud oświadczeniem w ramach oświadczenia tokenu dostępu. W usłudze Azure AD B2C aud oświadczenie jest identyfikatorem aplikacji jednostki uzależnionej. Ta wartość jest kolekcją i obsługuje wiele wartości przy użyciu ogranicznika przecinka.

      W poniższym tokenie iss dostępu wartość oświadczenia to https://contoso.b2clogin.com/11111111-1111-1111-1111-111111111111/v2.0/. Wartość aud oświadczenia to 22222222-2222-2222-2222-222222222222.

      {
        "exp": 1605549468,
        "nbf": 1605545868,
        "ver": "1.0",
        "iss": "https://contoso.b2clogin.com/11111111-1111-1111-1111-111111111111/v2.0/",
        "sub": "44444444-4444-4444-4444-444444444444",
        "aud": "22222222-2222-2222-2222-222222222222",
        "acr": "b2c_1a_signup_signin",
        "nonce": "defaultNonce",
        "iat": 1605545868,
        "auth_time": 1605545868,
        "name": "John Smith",
        "given_name": "John",
        "family_name": "Smith",
        "tid": "11111111-1111-1111-1111-111111111111"
      }
      
  6. Element OutputClaims profilu technicznego UserInfoAuthorization określa atrybuty, które mają być odczytywane z tokenu dostępu. ClaimTypeReferenceId jest odwołaniem do typu oświadczenia. Opcjonalny partnerClaimType jest nazwą oświadczenia zdefiniowanego w tokenie dostępu.

2. Dodaj element UserJourney

Element UserJourney definiuje ścieżkę, którą użytkownik przyjmuje podczas interakcji z aplikacją. Dodaj element UserJourneys, jeśli nie istnieje z elementem UserJourney zidentyfikowanym jako 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. Dołącz punkt końcowy do zasad jednostki uzależnionej

Aby uwzględnić punkt końcowy UserInfo w aplikacji jednostki uzależnionej, dodaj element Endpoint do pliku SocialAndLocalAccounts/SignUpOrSignIn.xml .

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

Ukończony element jednostki uzależnionej będzie następujący:

<?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. Przekazywanie plików

  1. Zaloguj się w witrynie Azure Portal.
  2. Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.
  3. Wybierz pozycję Wszystkie usługi w lewym górnym rogu witryny Azure Portal, a następnie wyszukaj i wybierz usługę Azure AD B2C.
  4. Wybierz pozycję Identity Experience Framework(Struktura obsługi tożsamości).
  5. Na stronie Zasady niestandardowe wybierz pozycję Przekaż zasady niestandardowe.
  6. Wybierz pozycję Zastąp zasady niestandardowe, jeśli już istnieje, a następnie wyszukaj i wybierz plik TrustframeworkExtensions.xml .
  7. Kliknij polecenie Przekaż.
  8. Powtórz kroki od 5 do 7 dla pliku jednostki uzależnionej, na przykład SignUpOrSignIn.xml.

Wywoływanie punktu końcowego UserInfo

Punkt końcowy UserInfo korzysta ze standardowego interfejsu API tokenu elementu nośnego OAuth2 wywoływanego przy użyciu tokenu dostępu otrzymanego podczas uzyskiwania tokenu dla aplikacji. Zwraca odpowiedź JSON zawierającą oświadczenia dotyczące użytkownika. Punkt końcowy UserInfo jest hostowany w usłudze Azure AD B2C pod adresem:

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

Punkt końcowy konfiguracji /.well-known configure (OpenID Połączenie dokument odnajdywania) zawiera userinfo_endpoint pole . Punkt końcowy UserInfo można odnajdywać programowo przy użyciu punktu końcowego /.well-known configure pod adresem:

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

Testowanie zasad

  1. W obszarze Zasady niestandardowe wybierz zasady zintegrowane z punktem końcowym UserInfo. Na przykład B2C_1A_SignUpOrSignIn.
  2. Wybierz opcję Uruchom teraz.
  3. W obszarze Wybierz aplikację wybierz aplikację, która została wcześniej zarejestrowana. W obszarze Wybierz adres URL odpowiedzi wybierz pozycję https://jwt.ms. Aby uzyskać więcej informacji, zobacz Rejestrowanie aplikacji internetowej w usłudze Azure Active Directory B2C.
  4. Zarejestruj się lub zaloguj się przy użyciu adresu e-mail lub konta społecznościowego.
  5. Skopiuj id_token w formacie zakodowanym z https://jwt.ms witryny internetowej. Można go użyć do przesłania żądania GET do punktu końcowego UserInfo i pobrania informacji o użytkowniku.
  6. Prześlij żądanie GET do punktu końcowego UserInfo i pobierz informacje o użytkowniku.
GET /yourtenant.onmicrosoft.com/b2c_1a_signup_signin/openid/v2.0/userinfo
Host: b2cninja.b2clogin.com
Authorization: Bearer <your access token>

Pomyślna odpowiedź wygląda następująco:

{
    "objectId": "44444444-4444-4444-4444-444444444444",
    "givenName": "John",
    "surname": "Smith",
    "displayName": "John Smith",
    "signInNames.emailAddress": "john.s@contoso.com"
}

Podaj opcjonalne oświadczenia

Aby udostępnić więcej oświadczeń aplikacji, wykonaj następujące kroki:

  1. Dodaj atrybuty użytkownika i dostosuj dane wejściowe użytkownika.

  2. Zmodyfikuj element OutputClaims profilu technicznego zasad jednostki uzależnionej przy użyciu oświadczeń, które chcesz podać. Użyj atrybutu , DefaultValue aby ustawić wartość domyślną. Można również ustawić wartość domyślną na funkcję rozpoznawania oświadczeń, na przykład {Context:CorrelationId}. Aby wymusić użycie wartości domyślnej, ustaw AlwaysUseDefaultValue atrybut na truewartość . Poniższy przykład dodaje oświadczenie miasta z wartością domyślną.

    <RelyingParty>
      ...
      <TechnicalProfile Id="PolicyProfile">
        ...
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="city" DefaultValue="Berlin" />
        </OutputClaims>
        ...
      </TechnicalProfile>
    </RelyingParty>
    
  3. Zmodyfikuj element UserInfoIssuer profilu technicznego InputClaims przy użyciu oświadczeń, które chcesz podać. Użyj atrybutu PartnerClaimType , aby zmienić nazwę oświadczenia powrócić do aplikacji. W poniższym przykładzie dodano oświadczenie miasta i zmieniono nazwę niektórych roszczeń.

    <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>
    

Następne kroki

  • Przykład zasad punktu końcowego UserInfo można znaleźć w witrynie GitHub.