You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

B2C客户端凭证流令牌缺失roles/scp声明及授权码流示例求助

问题分析与解决方案

一、client_credentials流的核心问题

你遇到的roles/scp声明缺失、openid/offline_access权限不生效,本质是流类型与权限类型不匹配:

  • openid和offline_access是委派权限,依赖用户登录授权,仅适用于有用户参与的OAuth2流(比如authorization code flow)。
  • client_credentials是无用户参与的服务到服务调用流,仅支持应用权限,且需对应用权限授予管理员同意后,令牌中才会出现roles声明。

另外,你的请求端点错误:B2C租户不能使用login.microsoft.com/common,必须使用B2C专属的b2clogin.com端点,否则无法正确识别B2C租户配置。

二、B2C租户下的Authorization Code Flow实现步骤

1. 授权请求(获取授权码)

发送GET请求到B2C授权端点:

https://<你的B2C租户名>.b2clogin.com/<你的B2C租户名>.onmicrosoft.com/<你的用户流名称>/oauth2/v2.0/authorize

携带以下参数:

  • client_id: 你的应用ID
  • response_type: code
  • redirect_uri: 你在B2C应用注册中配置的重定向URI(必须完全匹配)
  • scope: openid offline_access https://graph.microsoft.com/.default(可按需添加其他委派权限)
  • response_mode: query

2. 令牌请求(获取访问令牌+刷新令牌)

拿到授权码后,发送POST请求到B2C令牌端点:

https://<你的B2C租户名>.b2clogin.com/<你的B2C租户名>.onmicrosoft.com/<你的用户流名称>/oauth2/v2.0/token

携带以下form-data格式参数:

  • client_id: 你的应用ID
  • grant_type: authorization_code
  • code: 授权请求返回的授权码
  • redirect_uri: 与授权请求一致的重定向URI
  • client_secret: 你的客户端密钥(仅当应用为机密客户端时需要)
  • scope: 与授权请求一致的scope

三、关键注意事项

  • B2C需提前创建用户流(比如B2C_1_signup_signin),端点中必须指定该用户流名称。
  • 应用注册中需正确配置重定向URI,请求中的redirect_uri必须与配置完全一致。
  • 使用authorization code flow获取的令牌中,会包含scp声明(对应请求的委派权限),以及由offline_access权限触发的refresh_token。

内容的提问来源于stack exchange,提问作者Madhu77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:09:20