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

如何通过Azure AD B2C ROPC流程实现API访问鉴权保护

Azure AD B2C ROPC流Token无法通过API鉴权的排查方案

先核Token本身的合法性,别先改代码

  • 把Postman取到的access_token复制到JWT解析工具里解出payload,逐一核对三个核心字段:
    • aud字段:必须和你受保护API对应的应用注册客户端ID完全一致。如果这个值是你控制台客户端的应用ID,说明你请求Token时填错了scope:B2C下ROPC流请求Token的scope必须用带API标识的全路径格式,不能只填客户端ID或者openid/profile这类离线权限。
    • iss字段:必须和API侧JWT校验配置的颁发者地址完全匹配。B2C的iss地址末尾会带上你用的ROPC用户流/自定义策略名,API侧配置授权机构地址的时候必须把这个带策略名的完整地址填上,漏写策略名100%校验失败。
    • scp字段:必须包含你API授权要求的自定义scope值,缺任何一个要求的scope都会被拦截。

修正API侧JWT中间件的配置错误

  • 不要直接套用普通Azure AD的JWT配置模板,B2C有几个必填配置不能漏,以.NET Core/.NET 5+为例,正确的认证配置参考如下:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        // 替换成你自己的租户名、ROPC策略名
        options.Authority = "https://<你的B2C租户名>.b2clogin.com/<你的B2C租户名>.onmicrosoft.com/<你的ROPC策略名>/v2.0/";
        // 替换成你API应用注册的客户端ID
        options.Audience = "<API应用的客户端ID>";
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidIssuer = options.Authority,
            NameClaimType = "name"
        };
        // 开发阶段临时打开下面的配置,能把Token校验失败的具体原因打到日志里
        // options.IncludeErrorDetails = true;
    });
  • 中间件注册顺序不能错:必须先调用app.UseAuthentication(),再调用app.UseAuthorization(),顺序反了认证逻辑根本不会触发。需要鉴权的接口必须显式加[Authorize]特性,或者全局配置鉴权过滤器,别漏加。

核对B2C后台的权限配置

  • 你用来请求Token的控制台应用,必须在「API权限」配置页,把受保护API暴露的所有自定义scope都添加上,并且点击「授予管理员同意」。没做管理员授权的话,就算请求Token时带了scope,返回的Token里也不会带对应的scp声明,API校验scope时会直接返回403。
  • 打开受保护API对应的应用注册清单,确认accessTokenAcceptedVersion字段值为2,如果是null或者1,颁发的Token版本和中间件预期不匹配,也会导致校验失败。

排查客户端调用的低级错误

  • 向API发请求时,Authorization头格式必须是Authorization: Bearer <你的access_token内容>,注意Bearer和Token之间有半角空格,不要拼错前缀,不要把引号、换行符之类的多余字符带进Token值里。
  • 不要拿返回的id_token当access_token用:ROPC流返回结果里access_token字段才是给API做鉴权用的,id_token是给客户端读取用户基本信息用的,用id_token调API必然返回401。

排查时优先打开JWT中间件的错误日志,具体是aud不匹配、iss不匹配还是scope不匹配,日志里会写得非常清楚,比无目的改代码效率高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:51:21