【问题标题】:Add instagram as an identity provider in Azure AD B2C在 Azure AD B2C 中添加 instagram 作为身份提供者
【发布时间】:2019-01-31 07:44:09
【问题描述】:

我正在尝试将 instagram 添加为身份提供程序,但遇到了 Azure AD B2C 无法在 JSON 响应中识别 instagram 用户 ID 的问题。调用 instagram 的 self 端点后,这是我得到的响应:

{
"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
}

【问题讨论】:

    标签: azure-ad-b2c


    【解决方案1】:

    如您所见,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>
    

    在此技术简介中,您会注意到“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
    

    所以基本上,发生的步骤是:

    1. B2C 从 Instagram 获取 JSON 响应
    2. B2C 将响应中的“数据”对象映射到“instagramData”
    3. 运行声明转换,从输入 (instagramData) 中提取“id”,并将其保存到 socialIdpUserId 声明中。

    为了保存其他变量,比如full_name,需要相应添加另一个claimTransformation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多