Azure AD B2C自定义策略中的Json类型声明

时间:2018-01-09 06:30:47

标签: azure azure-active-directory azure-ad-b2c

我使用Azure AD B2C自定义策略从第三方获取声明并将其映射到Azure AD B2C令牌中返回的声明。

如果第三方以字符串形式返回声明,则我在策略中的用户旅程正常。我的问题是第三方以json的形式返回索赔。我无法在B2C策略的XML Schema中找到可以处理这种情况的任何相关

有没有办法使用Azure AD B2C自定义策略执行此操作?

1 个答案:

答案 0 :(得分:0)

虽然我不知道您正在使用的第三方身份提供商,但我认为您可以通过在自定义政策中添加自定义提供商来实现添加提供商。

首先,根据您的帖子,我假设您正在使用Oauth / OIDC提供商。

示例:使用自定义政策添加LinkedIn作为身份提供商:

<ClaimsProviders>元素中,添加以下XML代码段:

<ClaimsProvider>
  <Domain>linkedin.com</Domain>
  <DisplayName>LinkedIn</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="LinkedIn-OAUTH">
      <DisplayName>LinkedIn</DisplayName>
      <Protocol Name="OAuth2" />
      <Metadata>
        <Item Key="ProviderName">linkedin</Item>
        <Item Key="authorization_endpoint">https://www.linkedin.com/oauth/v2/authorization</Item>
        <Item Key="AccessTokenEndpoint">https://www.linkedin.com/oauth/v2/accessToken</Item>
        <Item Key="ClaimsEndpoint">https://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address,headline)</Item>
        <Item Key="ClaimsEndpointAccessTokenName">oauth2_access_token</Item>
        <Item Key="ClaimsEndpointFormatName">format</Item>
        <Item Key="ClaimsEndpointFormat">json</Item>
        <Item Key="scope">r_emailaddress r_basicprofile</Item>
        <Item Key="HttpBinding">POST</Item>
        <Item Key="UsePolicyInRedirectUri">0</Item>
        <Item Key="client_id">Your LinkedIn application client ID</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="client_secret" StorageReferenceId="B2C_1A_LinkedInSecret" />
      </CryptographicKeys>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="id" />
        <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="firstName" />
        <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="lastName" />
        <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="emailAddress" />
        <!--<OutputClaim ClaimTypeReferenceId="jobTitle" PartnerClaimType="headline" />-->
        <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="linkedin.com" />
        <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
      </OutputClaims>
      <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
        <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
        <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
        <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" />
      </OutputClaimsTransformations>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

此外,您可以添加<Item Key="AccessTokenResponseFormat">json</Item>来声明json类型的端点。

您可以使用本文档中的自定义策略,查看有关将LinkedIn添加为身份提供商的更多详细信息。

附加:

我不知道您使用的第三个身份提供商,如果有帮助,请告诉我。