Koncový bod UserInfo

Než začnete, pomocí selektoru Zvolit typ zásady v horní části této stránky zvolte typ zásady, kterou nastavujete. Azure Active Directory B2C nabízí dvě metody pro definování způsobu interakce uživatelů s vašimi aplikacemi: prostřednictvím předdefinovaných toků uživatelů nebo prostřednictvím plně konfigurovatelných vlastních zásad. Kroky vyžadované v tomto článku se pro každou metodu liší.

Koncový bod UserInfo je součástí specifikace OpenID Připojení standardu (OIDC) a je navržený tak, aby vracel deklarace identity o ověřeném uživateli. Koncový bod UserInfo je definován v zásadách předávající strany pomocí elementu EndPoint .

Tato funkce je dostupná jenom pro vlastní zásady. Pro kroky nastavení vyberte v předchozím selektoru vlastní zásady .

Požadavky

Přehled koncového bodu UserInfo

Informace o uživateli UserJourney určuje:

  • Autorizace: Koncový bod UserInfo je chráněn nosným tokenem. Vystavený přístupový token se zobrazí v autorizační hlavičce koncovému bodu UserInfo. Zásada určuje technický profil, který ověřuje příchozí token a extrahuje deklarace identity, například objectId uživatele. ObjectId uživatele se používá k načtení deklarací identity, které se mají vrátit v odpovědi cesty koncového bodu UserInfo.
  • Krok orchestrace:
    • Ke shromažďování informací o uživateli se používá krok orchestrace. Na základě deklarací identity v rámci příchozího přístupového tokenu vyvolá cesta uživatele technický profil Microsoft Entra ID k načtení dat o uživateli, například čtení uživatele podle objectId.
    • Volitelné kroky orchestrace – Můžete přidat další kroky orchestrace, například technický profil rozhraní REST API, abyste získali další informace o uživateli.
    • Vystavitel UserInfo – Určuje seznam deklarací identity, které koncový bod UserInfo vrátí.

Vytvoření koncového bodu UserInfo

1. Přidání technického profilu vystavitele tokenu

  1. Otevřete soubor TrustFrameworkExtensions.xml.

  2. Pokud ještě neexistuje, přidejte Element ClaimsProvider a jeho podřízené elementy jako první prvek v elementu BuildingBlocks.

  3. Přidejte následujícího zprostředkovatele deklarací identity:

    <!-- 
    <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. Část InputClaims v rámci technického profilu UserInfoIssuer určuje atributy, které chcete vrátit. Technický profil UserInfoIssuer se nazývá na konci cesty uživatele.

  5. Technický profil UserInfoAuthorization ověří podpis, název vystavitele a cílovou skupinu tokenů a extrahuje deklaraci identity z příchozího tokenu. Změňte následující metadata tak, aby odrážela vaše prostředí:

    1. issuer – Tato hodnota musí být stejná jako iss deklarace identity v rámci deklarace přístupového tokenu. Tokeny vydané službou Azure AD B2C používají vystavitele ve formátu https://yourtenant.b2clogin.com/your-tenant-id/v2.0/. Přečtěte si další informace o přizpůsobení tokenu.

    2. IdTokenAudience – Musí být shodná s aud deklarací identity v rámci deklarace přístupového tokenu. V Azure AD B2C aud je deklarace identity ID vaší aplikace předávající strany. Tato hodnota je kolekce a podporuje více hodnot pomocí oddělovače čárky.

      V následujícím přístupovém tokenu iss je https://contoso.b2clogin.com/11111111-1111-1111-1111-111111111111/v2.0/hodnota deklarace identity . Hodnota aud deklarace identity je 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 technického profilu UserInfoAuthorization určuje atributy, které chcete číst z přístupového tokenu. ClaimTypeReferenceId je odkaz na typ deklarace identity. Volitelný PartnerClaimType je název deklarace identity definované v přístupovém tokenu.

2. Přidání elementu UserJourney

Element UserJourney definuje cestu, kterou uživatel vezme při interakci s vaší aplikací. Přidejte prvek UserJourneys, pokud neexistuje s UserJourney identifikovaný jakoUserInfoJourney:

<!-- 
<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. Zahrnutí koncového bodu do zásad předávající strany

Pokud chcete do aplikace předávající strany zahrnout koncový bod UserInfo, přidejte do souboru SocialAndLocalAccounts/SignUpOrSignIn.xml element Endpoint.

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

Dokončený element předávající strany bude následující:

<?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. Nahrání souborů

  1. Přihlaste se k portálu Azure.
  2. Pokud máte přístup k více tenantům, v horní nabídce vyberte ikonu Nastavení a v nabídce Adresáře a předplatná přepněte do svého tenanta Azure AD B2C.
  3. V levém horním rohu webu Azure Portal zvolte Všechny služby a pak vyhledejte a vyberte Azure AD B2C.
  4. Vyberte Architekturu prostředí identit.
  5. Na stránce Vlastní zásady vyberte Nahrát vlastní zásady.
  6. Vyberte Přepsat vlastní zásadu, pokud už existuje, a pak vyhledejte a vyberte soubor TrustframeworkExtensions.xml .
  7. Klikněte na tlačítko Odeslat.
  8. Opakujte kroky 5 až 7 pro soubor předávající strany, například SignUpOrSignIn.xml.

Volání koncového bodu UserInfo

Koncový bod UserInfo využívá standardní rozhraní API nosného tokenu OAuth2, které se volá pomocí přístupového tokenu přijatého při získání tokenu pro vaši aplikaci. Vrátí odpověď JSON obsahující deklarace identity o uživateli. Koncový bod UserInfo je hostovaný v Azure AD B2C na adrese:

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

Koncový bod konfigurace /.well-known (OpenID Připojení dokumentu zjišťování) obsahuje userinfo_endpoint pole. Koncový bod UserInfo můžete zjistit prostřednictvím kódu programu pomocí koncového bodu /.well-known configure na adrese:

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

Testování zásad

  1. V části Vlastní zásady vyberte zásadu, se kterou jste integrovali koncový bod UserInfo. Například B2C_1A_SignUpOrSignIn.
  2. Vyberte Spustit.
  3. V části Vybrat aplikaci vyberte aplikaci, kterou jste předtím zaregistrovali. Pro výběr adresy URL odpovědi zvolte https://jwt.ms. Další informace najdete v tématu Registrace webové aplikace v Azure Active Directory B2C.
  4. Zaregistrujte se nebo se přihlaste pomocí e-mailové adresy nebo účtu sociální sítě.
  5. Zkopírujte id_token ve svém zakódovaném formátu z https://jwt.ms webu. Můžete ho použít k odeslání požadavku GET do koncového bodu UserInfo a načtení informací o uživateli.
  6. Odešlete požadavek GET do koncového bodu UserInfo a načtěte informace o uživateli.
GET /yourtenant.onmicrosoft.com/b2c_1a_signup_signin/openid/v2.0/userinfo
Host: b2cninja.b2clogin.com
Authorization: Bearer <your access token>

Úspěšná odpověď by vypadala takto:

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

Zadání volitelných deklarací identity

Pokud chcete aplikaci poskytnout více deklarací identity, postupujte takto:

  1. Přidejte atributy uživatele a přizpůsobte uživatelský vstup.

  2. Upravte element OutputClaims zásady předávající strany pomocí deklarací identity, které chcete poskytnout. Pomocí atributu DefaultValue nastavte výchozí hodnotu. Výchozí hodnotu můžete nastavit také na překladač deklarací identity, například {Context:CorrelationId}. Chcete-li vynutit použití výchozí hodnoty, nastavte AlwaysUseDefaultValue atribut na true. Následující příklad přidá deklaraci města s výchozí hodnotou.

    <RelyingParty>
      ...
      <TechnicalProfile Id="PolicyProfile">
        ...
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="city" DefaultValue="Berlin" />
        </OutputClaims>
        ...
      </TechnicalProfile>
    </RelyingParty>
    
  3. Upravte prvek UserInfoIssuer technical profile InputClaims s deklaracemi, které chcete poskytnout. Pomocí atributu PartnerClaimType můžete změnit název deklarace identity, která se vrátí do vaší aplikace. Následující příklad přidá deklaraci města a změní název některých deklarací identity.

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

Další kroky

  • Příklad zásad koncového bodu UserInfo najdete na GitHubu.