如何使用 Azure AD B2C 获取 Facebook 个人资料图片

how to get Facebook profile picture using Azure AD B2C

我正在使用 MSAL.js 并且可以在 Azure AD B2C 中成功 sign-in/sign-up 用户使用 Facebook 作为身份提供者。问题是登录后我无法检索用户的个人资料图片。

Azure AD B2C returns 与用户的 Facebook id 无关的对象标识符。

使用自定义策略,您可以检索 Facebook 用户的图片字段,然后在 ID 令牌中发出图片声明,如下所示。

1: 完成 Azure Active Directory B2C: Get started with custom policies steps with one of the social account policies such as the SocialAndLocalAccounts 个。

2:在 the extensions file 中声明 "picture" 声明:

<ClaimType Id="picture">
  <DisplayName>Picture</DisplayName>
  <DataType>string</DataType>
</ClaimType>

3:将 "picture" 字段添加到 "ClaimsEndpoint" 元数据项,并将 "picture" 输出声明添加到 the extensions policy 中的 "Facebook-OAUTH" 技术配置文件:

<ClaimsProvider>
  <DisplayName>Facebook</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Facebook-OAUTH">
      <Metadata>
        <Item Key="client_id">facebook_clientid</Item>
        <Item Key="scope">email public_profile</Item>
        <Item Key="ClaimsEndpoint">https://graph.facebook.com/me?fields=id,first_name,last_name,name,email,picture</Item>
      </Metadata>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="picture" PartnerClaimType="picture" />
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

4:在the sign-up or sign-in relying party policy中发出"picture"声明:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" />
      <OutputClaim ClaimTypeReferenceId="givenName" />
      <OutputClaim ClaimTypeReferenceId="surname" />
      <OutputClaim ClaimTypeReferenceId="email" />
      <OutputClaim ClaimTypeReferenceId="picture" />
      <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>