Azure B2C 对接Facebook注册时索要头像而非邮箱的问题咨询
头像、姓名为必填提示的原因
这个属于Facebook OAuth的正常规则,不是你的配置遗漏:
- 你配置的
scope中包含public_profile,这是Facebook登录的必选基础权限组,本身就包含用户头像、姓名、ID等公开基础字段,哪怕你没有在ClaimsEndpoint中请求头像字段,Facebook的授权页也会默认展示这些权限的申请提示,且用户无法拒绝该组权限。
邮箱无法正常获取的常见遗漏配置
你需要逐一排查以下配置项:
- Facebook应用端权限审核未完成
公开使用的Facebook应用,email属于需要单独申请审核的权限:
登录Facebook开发者后台,进入你的应用,在「应用审核」-「权限和功能」板块找到email权限,提交使用场景、相关资料申请审核,审核通过后普通用户才能正常授权邮箱权限,未审核通过时只有应用的管理员、测试人员账号可以拿到邮箱返回值。 - Facebook Graph API请求未指定版本
你当前的ClaimsEndpoint没有指定Graph API版本,Facebook老旧版本的API可能出现字段返回异常,建议修改为带版本号的请求地址,示例:<Item Key="ClaimsEndpoint">https://graph.facebook.com/v18.0/me?fields=id,first_name,last_name,name,email</Item> - 技术概要配置不全
你贴出的Facebook技术概要片段缺少必要配置项:- 缺少
<Protocol Name="OAuth2" />声明,无法正确识别OAuth2授权逻辑 - 缺少
authorization_endpoint、AccessTokenEndpoint等必要元数据配置,完整的基础元数据参考如下:
<Metadata> <Item Key="ProviderName">facebook</Item> <Item Key="authorization_endpoint">https://www.facebook.com/v18.0/dialog/oauth</Item> <Item Key="AccessTokenEndpoint">https://graph.facebook.com/v18.0/oauth/access_token</Item> <Item Key="ClaimsEndpoint">https://graph.facebook.com/v18.0/me?fields=id,first_name,last_name,name,email</Item> <Item Key="client_id">{Settings:FacebookAppId}</Item> <Item Key="scope">email public_profile</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">false</Item> </Metadata> - 缺少
- 声明映射与架构遗漏
- 确认你的自定义策略的声明架构(BuildingBlocks -> ClaimsSchema)中已经定义了
email声明类型 - 如果需要保留姓名等返回字段,还需要补充对应的
OutputClaim映射,示例:
<OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="id" /> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" /> <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" /> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" /> <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="facebook.com" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" /> </OutputClaims> - 确认你的自定义策略的声明架构(BuildingBlocks -> ClaimsSchema)中已经定义了
- Facebook应用状态未上线
确认你的Facebook应用已经切换为「上线」状态,且已经正确填写了隐私政策、服务条款链接,否则普通用户无法完成授权,也无法获取邮箱字段。
内容的提问来源于stack exchange,提问作者ATrivino
相关产品推荐
相关产品推荐

