UserInfo uç noktası

Başlamadan önce, ayarlamakta olduğunuz ilke türünü seçmek için bu sayfanın üst kısmındaki İlke türü seç seçicisini kullanın. Azure Active Directory B2C, kullanıcıların uygulamalarınızla nasıl etkileşim kurduğunu tanımlamak için iki yöntem sunar: önceden tanımlanmış kullanıcı akışları veya tam olarak yapılandırılabilir özel ilkeler aracılığıyla. Bu makalede gerekli adımlar her yöntem için farklıdır.

UserInfo uç noktası OpenID Bağlan standart (OIDC) belirtiminin bir parçasıdır ve kimliği doğrulanmış kullanıcı hakkındaki talepleri döndürmek için tasarlanmıştır. UserInfo uç noktası, EndPoint öğesi kullanılarak bağlı olan taraf ilkesinde tanımlanır.

Bu özellik yalnızca özel ilkeler için kullanılabilir. Kurulum adımları için, önceki seçicide Özel ilke'yi seçin.

Önkoşullar

  • Active Directory B2C'de özel ilkeleri kullanmaya başlama bölümündeki adımları tamamlayın. Bu öğretici, Özel ilke dosyalarını Azure AD B2C kiracı yapılandırmanızı kullanacak şekilde güncelleştirme konusunda size yol gösterir.
  • Bir web uygulamasını kaydetmediyseniz, web uygulamasını kaydetme adımlarını kullanarak bir web uygulaması kaydedin.

UserInfo uç noktasına genel bakış

UserJourney'nin belirttiği kullanıcı bilgileri:

  • Yetkilendirme: UserInfo uç noktası taşıyıcı belirteci ile korunur. Verilen erişim belirteci, yetkilendirme üst bilgisinde UserInfo uç noktasına sunulur. İlke, gelen belirteci doğrulayan ve kullanıcının objectId değeri gibi talepleri ayıklayan teknik profili belirtir. Kullanıcının objectId değeri, UserInfo uç nokta yolculuğunun yanıtında döndürülecek talepleri almak için kullanılır.
  • Düzenleme adımı:
    • Düzenleme adımı, kullanıcı hakkında bilgi toplamak için kullanılır. Gelen erişim belirtecindeki taleplere bağlı olarak, kullanıcı yolculuğu, kullanıcı hakkındaki verileri almak için bir Microsoft Entra Id teknik profili çağırır; örneğin, kullanıcıyı objectId değeriyle okur.
    • İsteğe bağlı düzenleme adımları - Kullanıcı hakkında daha fazla bilgi almak için REST API teknik profili gibi daha fazla düzenleme adımı ekleyebilirsiniz.
    • UserInfo Veren - UserInfo uç noktasının döndürdüğü taleplerin listesini belirtir.

UserInfo uç noktası oluşturma

1. Belirteç Veren teknik profilini ekleme

  1. TrustFrameworkExtensions.xml dosyasını açın.

  2. Henüz yoksa, BuildingBlocks öğesinin altındaki ilk öğe olarak ClaimsProvider öğesini ve alt öğelerini ekleyin.

  3. Aşağıdaki talep sağlayıcısını ekleyin:

    <!-- 
    <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. UserInfoIssuer teknik profilindeki InputClaims bölümü, döndürmek istediğiniz öznitelikleri belirtir. UserInfoIssuer teknik profili, kullanıcı yolculuğunun sonunda çağrılır.

  5. UserInfoAuthorization teknik profili imzayı, verenin adını ve belirteç hedef kitlesini doğrular ve gelen belirteçten talebi ayıklar. Aşağıdaki meta verileri ortamınızı yansıtacak şekilde değiştirin:

    1. veren - Bu değer erişim belirteci talebi içindeki taleple aynı iss olmalıdır. Azure AD B2C tarafından verilen belirteçler biçiminde https://yourtenant.b2clogin.com/your-tenant-id/v2.0/bir veren kullanır. Belirteç özelleştirmesi hakkında daha fazla bilgi edinin.

    2. IdTokenAudience - Erişim belirteci talebi içindeki taleple aud aynı olmalıdır. Azure AD B2C'de aud talep, bağlı olan taraf uygulamanızın kimliğidir. Bu değer bir koleksiyondur ve virgül sınırlayıcı kullanarak birden çok değeri destekler.

      Aşağıdaki erişim belirtecinde talep iss değeri şeklindedir https://contoso.b2clogin.com/11111111-1111-1111-1111-111111111111/v2.0/. Talep aud değeri şeklindedir 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. UserInfoAuthorization teknik profilinin OutputClaims öğesi, erişim belirtecinden okumak istediğiniz öznitelikleri belirtir. ClaimTypeReferenceId, bir talep türüne başvurudur. İsteğe bağlı PartnerClaimType , erişim belirtecinde tanımlanan talebin adıdır.

2. UserJourney öğesini ekleme

UserJourney öğesi, kullanıcının uygulamanızla etkileşim kurarken izlediği yolu tanımlar. UserJourneys öğesi olarak tanımlanan UserInfoJourneyUserJourney ile yoksa öğesini ekleyin:

<!-- 
<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. Uç noktayı bağlı olan taraf ilkesine dahil etme

Bağlı olan taraf uygulamasına UserInfo uç noktasını eklemek için SocialAndLocalAccounts/SignUpOrSignIn.xml dosyasına bir Endpoint öğesi ekleyin.

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

Tamamlanan bağlı olan taraf öğesi aşağıdaki gibi olacaktır:

<?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. Dosyaları karşıya yükleme

  1. Azure Portal’ında oturum açın.
  2. Birden çok kiracıya erişiminiz varsa, Dizinler + abonelikler menüsünden Azure AD B2C kiracınıza geçmek için üstteki menüden Ayarlar simgesini seçin.
  3. Azure portalının sol üst köşesindeki Tüm hizmetler'i seçin ve ardından Azure AD B2C'yi arayıp seçin.
  4. Kimlik Deneyimi Çerçevesi'ne tıklayın.
  5. Özel ilkeler sayfasında Özel ilkeyi karşıya yükle'yi seçin.
  6. Zaten varsa Özel ilkenin üzerine yaz'ı seçin ve ardından TrustframeworkExtensions.xml dosyasını arayın ve seçin.
  7. Karşıya Yükle'ye tıklayın.
  8. Bağlı olan taraf dosyası için SignUpOrSignIn.xml gibi 5 ile 7 arasındaki adımları yineleyin.

UserInfo uç noktasını çağırma

UserInfo uç noktası, uygulamanız için belirteç alınırken alınan erişim belirtecini kullanarak çağrılan standart OAuth2 Taşıyıcı belirteç API'sini kullanır. Kullanıcı hakkındaki talepleri içeren bir JSON yanıtı döndürür. UserInfo uç noktası Azure AD B2C'de şu konumda barındırılır:

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

/.well-known yapılandırma uç noktası (OpenID Bağlan bulma belgesi) alanı listeleruserinfo_endpoint. Şu konumdaki /.well-known yapılandırma uç noktasını kullanarak UserInfo uç noktasını program aracılığıyla bulabilirsiniz:

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

İlkeyi test etme

  1. Özel ilkeler'in altında UserInfo uç noktasını tümleştirdiğiniz ilkeyi seçin. Örneğin, B2C_1A_SignUpOrSignIn.
  2. Şimdi Çalıştır'ı seçin.
  3. Uygulama seç'in altında, daha önce kaydettiğiniz uygulamanızı seçin. Yanıt url'sini seçin için öğesini seçinhttps://jwt.ms. Daha fazla bilgi için bkz . Azure Active Directory B2C'de web uygulaması kaydetme.
  4. Bir e-posta adresi veya sosyal hesap ile kaydolun veya oturum açın.
  5. web sitesinden kodlanmış biçimde https://jwt.ms id_token kopyalayın. UserInfo uç noktasına get isteği göndermek ve kullanıcı bilgilerini almak için bunu kullanabilirsiniz.
  6. UserInfo uç noktasına bir GET isteği gönderin ve kullanıcı bilgilerini alın.
GET /yourtenant.onmicrosoft.com/b2c_1a_signup_signin/openid/v2.0/userinfo
Host: b2cninja.b2clogin.com
Authorization: Bearer <your access token>

Başarılı bir yanıt şöyle görünür:

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

İsteğe bağlı talepler sağlama

Uygulamanıza daha fazla talep sağlamak için şu adımları izleyin:

  1. Kullanıcı öznitelikleri ekleyin ve kullanıcı girişini özelleştirin.

  2. Bağlı olan taraf ilkesi teknik profili OutputClaims öğesini sağlamak istediğiniz taleplerle değiştirin. DefaultValue Varsayılan bir değer ayarlamak için özniteliğini kullanın. Varsayılan değeri gibi {Context:CorrelationId}bir talep çözümleyici olarak da ayarlayabilirsiniz. Varsayılan değerin kullanılmasını zorlamak için özniteliğini AlwaysUseDefaultValue olarak trueayarlayın. Aşağıdaki örnek, şehir talebine varsayılan değer ekler.

    <RelyingParty>
      ...
      <TechnicalProfile Id="PolicyProfile">
        ...
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="city" DefaultValue="Berlin" />
        </OutputClaims>
        ...
      </TechnicalProfile>
    </RelyingParty>
    
  3. UserInfoIssuer teknik profili InputClaims öğesini sağlamak istediğiniz taleplerle değiştirin. Uygulamanızın PartnerClaimType talep iadesinin adını değiştirmek için özniteliğini kullanın. Aşağıdaki örnek şehir talebi ekler ve taleplerden bazılarının adını değiştirir.

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

Sonraki Adımlar