Azure B2C中User.Read.All权限失效,如何读取用户邮箱?
B2C读取用户邮箱的权限问题解决办法
你当前用自定义范围user_impersonation能正常获取令牌,但换成User.Read.All时出现权限不足错误,核心原因是这两个范围不属于同一资源:user_impersonation是你自定义API的范围,而User.Read.All是Microsoft Graph的权限,不能直接替换使用。下面给你两种可行方案:
方案一:直接从B2C令牌中获取邮箱(最便捷)
不需要调用Microsoft Graph,只要配置用户流让邮箱出现在返回的令牌里:
- 进入Azure门户的B2C租户,打开你用的
B2C_1A_SIGNUP_SIGNIN用户流 - 切换到「应用程序声明」页面,勾选「电子邮件」选项,保存用户流
- 重新发起授权请求,保持scope为
https://xx.onmicrosoft.com/xx/user_impersonation(也可以加上openid profile),拿到令牌后解码,就能在声明字段里找到邮箱(一般是email或emails)
方案二:通过Microsoft Graph获取邮箱(需配置Graph权限)
如果必须调用Graph接口,得按以下步骤配置:
- 注册Graph专用应用:在你的B2C租户中新建一个应用,不要用现有的
IdentityExperienceFrameworkAppId - 添加并授权Graph权限:给这个新应用添加「应用权限」(不是委派权限)
User.Read.All,然后点击「授予管理员同意」(需要全局管理员操作) - 调整授权请求:将请求的scope改为
https://graph.microsoft.com/User.Read.All,client_id换成新注册的Graph应用ID;注意这种场景适合用客户端凭据流(client_credentials)发起请求,而非你当前用的隐式流
你遇到的错误提示:
This application does not have sufficient permissions against this web resource to perform the operation,本质是你当前的应用未被授予Graph的User.Read.All权限,且B2C用户流默认不支持直接请求Graph的委派权限。
内容的提问来源于stack exchange,提问作者baton
相关产品推荐
相关产品推荐

