Azure ad b2c 在Azure AD B2C中将instagram添加为身份提供商

Azure ad b2c 在Azure AD B2C中将instagram添加为身份提供商,azure-ad-b2c,Azure Ad B2c,我试图将instagram添加为身份提供商,但我遇到了一个问题,Azure AD B2C无法在JSON响应中识别instagram用户的id。调用instagram的self endpoint后,我得到的响应如下: { "data": { "id": "4835453534", "username": "myUsername", "profile_picture": "https://profilepic.jpg", "full_name": "", "b

我试图将instagram添加为身份提供商,但我遇到了一个问题,Azure AD B2C无法在JSON响应中识别instagram用户的id。调用instagram的self endpoint后,我得到的响应如下:

{
"data": {
    "id": "4835453534",
    "username": "myUsername",
    "profile_picture": "https://profilepic.jpg",
    "full_name": "",
    "bio": "",
    "website": "",
    "is_business": false,
    "counts": {
        "media": 0,
        "follows": 10,
        "followed_by": 100
    }
},
"meta": {
    "code": 200
}

正如您所注意到的,instagram的响应并不典型。关于用户的数据嵌套在“数据”对象中。为了提取值,需要使用声明转换

这就是技术概要最终的样子-

  <ClaimsProvider>
<Domain>instagram.com</Domain>
<DisplayName>instagram</DisplayName>
<TechnicalProfiles>
  <TechnicalProfile Id="Instagram-OAUTH">
    <DisplayName>Instagram</DisplayName>
    <Protocol Name="OAuth2" />
    <Metadata>
      <Item Key="ProviderName">instagram</Item>
      <Item Key="authorization_endpoint">https://api.instagram.com/oauth/authorize</Item>
      <Item Key="AccessTokenEndpoint">https://api.instagram.com/oauth/access_token</Item>
      <Item Key="ClaimsEndpoint">https://api.instagram.com/v1/users/self</Item>
      <Item Key="scope">basic</Item>
      <Item Key="HttpBinding">POST</Item>
      <Item Key="UsePolicyInRedirectUri">0</Item>
      <Item Key="client_id">YOUR CLIENT ID HERE</Item>
      <Item Key="response_types">code</Item>
    </Metadata>
    <CryptographicKeys>
      <Key Id="client_secret" StorageReferenceId="B2C_1A_InstagramSecret" />
    </CryptographicKeys>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="instagramData" PartnerClaimType="data"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="instagram.com" />
      <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
    </OutputClaims>
    <OutputClaimsTransformations>
      <OutputClaimsTransformation ReferenceId="ExtractIDFromResponse" />
      <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
      <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
      <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
      <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" />
    </OutputClaimsTransformations>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
  </TechnicalProfile>
</TechnicalProfiles>

instagram.com
instagram
一款图片分享应用
instagram
https://api.instagram.com/oauth/authorize
https://api.instagram.com/oauth/access_token
https://api.instagram.com/v1/users/self
基本的
邮递
0
你的客户ID在这里
代码

在此技术概要文件中,您将注意到“ExtractIDFromResponse”转换。这需要添加,应该如下所示:

  <ClaimsTransformation Id="ExtractIDFromResponse" TransformationMethod="GetClaimFromJson">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="instagramData" TransformationClaimType="inputJson" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="claimToExtract" DataType="string" Value="id" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="socialIdpUserId" TransformationClaimType="extractedClaim" />
    </OutputClaims>
  </ClaimsTransformation>

您还需要为数据创建索赔类型,如下所示:

  <ClaimType Id="instagramData">
    <DisplayName>data</DisplayName>
    <DataType>string</DataType>
    <AdminHelpText>data object from Instagram</AdminHelpText>
    <UserHelpText>data object from Instagram</UserHelpText>
  </ClaimType

数据
一串
Instagram中的数据对象
Instagram中的数据对象

正如您所注意到的,instagram的响应并不典型。关于用户的数据嵌套在“数据”对象中。为了提取值,需要使用声明转换

这就是技术概要最终的样子-

  <ClaimsProvider>
<Domain>instagram.com</Domain>
<DisplayName>instagram</DisplayName>
<TechnicalProfiles>
  <TechnicalProfile Id="Instagram-OAUTH">
    <DisplayName>Instagram</DisplayName>
    <Protocol Name="OAuth2" />
    <Metadata>
      <Item Key="ProviderName">instagram</Item>
      <Item Key="authorization_endpoint">https://api.instagram.com/oauth/authorize</Item>
      <Item Key="AccessTokenEndpoint">https://api.instagram.com/oauth/access_token</Item>
      <Item Key="ClaimsEndpoint">https://api.instagram.com/v1/users/self</Item>
      <Item Key="scope">basic</Item>
      <Item Key="HttpBinding">POST</Item>
      <Item Key="UsePolicyInRedirectUri">0</Item>
      <Item Key="client_id">YOUR CLIENT ID HERE</Item>
      <Item Key="response_types">code</Item>
    </Metadata>
    <CryptographicKeys>
      <Key Id="client_secret" StorageReferenceId="B2C_1A_InstagramSecret" />
    </CryptographicKeys>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="instagramData" PartnerClaimType="data"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="instagram.com" />
      <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
    </OutputClaims>
    <OutputClaimsTransformations>
      <OutputClaimsTransformation ReferenceId="ExtractIDFromResponse" />
      <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
      <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
      <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
      <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" />
    </OutputClaimsTransformations>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
  </TechnicalProfile>
</TechnicalProfiles>

instagram.com
instagram
一款图片分享应用
instagram
https://api.instagram.com/oauth/authorize
https://api.instagram.com/oauth/access_token
https://api.instagram.com/v1/users/self
基本的
邮递
0
你的客户ID在这里
代码

在此技术概要文件中,您将注意到“ExtractIDFromResponse”转换。这需要添加,应该如下所示:

  <ClaimsTransformation Id="ExtractIDFromResponse" TransformationMethod="GetClaimFromJson">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="instagramData" TransformationClaimType="inputJson" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="claimToExtract" DataType="string" Value="id" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="socialIdpUserId" TransformationClaimType="extractedClaim" />
    </OutputClaims>
  </ClaimsTransformation>

您还需要为数据创建索赔类型,如下所示:

  <ClaimType Id="instagramData">
    <DisplayName>data</DisplayName>
    <DataType>string</DataType>
    <AdminHelpText>data object from Instagram</AdminHelpText>
    <UserHelpText>data object from Instagram</UserHelpText>
  </ClaimType

数据
一串
Instagram中的数据对象
Instagram中的数据对象