【发布时间】:2018-07-10 08:40:18
【问题描述】:
我目前正在使用带有 LinkedIn 集成的 Azure AD B2C 来登录我的应用程序。登录过程正在运行,我收到了一些关于用户的声明,例如姓名和电子邮件地址。
我想获取 LinkedIn 个人资料图片,以便在我的应用中拥有默认个人资料图片。我尝试使用自定义策略,但我无法让它们发挥作用。我尝试编辑 TrustFrameworkBase.xml 和 TrustFrameworkExtensions.xml 但没有任何结果。 我在我的 TrustFrameworkExtensions.xml 中添加了 linkedIn 作为声明提供者
<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, picture-url)</Item>
<Item Key="SendClaimsIn">Body</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"><CLIENT ID OF LINKEDIN APP></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" />
<OutputClaim ClaimTypeReferenceId="extension_Picture" PartnerClaimType="pictureUrl" />
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
<OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
<OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
<OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" />
</OutputClaimsTransformations>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
我还在我的 TrustFrameworkBase.xml 中添加了这个 Claimtype
<ClaimType Id="extension_Picture">
<DisplayName>Picture</DisplayName>
<DataType>string</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OAuth2" PartnerClaimType="picture" />
<Protocol Name="OpenIdConnect" PartnerClaimType="picture" />
<Protocol Name="SAML2" PartnerClaimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/extension_Picture" />
</DefaultPartnerClaimTypes>
<UserHelpText>Your picture.</UserHelpText>
<UserInputType>TextBox</UserInputType>
</ClaimType>
有人知道如何在 Azure 上正确实施声明,以便我可以从linkedIn 获取个人资料图片吗?
【问题讨论】:
-
要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。取而代之的是describe the problem 和迄今为止为解决该问题所做的工作。我想说的是,要实现这一点相当复杂。一旦 ppl 使用旧好的 Gravatar - 您可以相当容易地基于 gravatar 构建默认个人资料图片,以提示您的用户使用它。
-
感谢您的评论。我尝试扩展我的答案,以便提供更多信息,希望您能进一步帮助我。
-
您检查过原始 LinkedIn 令牌吗?图片 url 声明是
pictureUrl还是picture-url?根据docs,它是picture-url,你已经配置了PartnerClaimType="pictureUrl"。在您的声明架构定义中为picture。另外,顺便说一句,避免编辑过多的基础,您可以在Extention政策中添加声明类型。 -
感谢您的帮助。我将pictureUrl 更改为picture-url,但登录策略仍然没有返回LinkedIn 图片url。您知道如何正确调试自定义策略吗?我在查找有关linkedIn 作为 idp 的 Azure 广告 b2c 政策文档时遇到了很多麻烦。
标签: azure azure-active-directory azure-ad-b2c identity-experience-framework