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

非Azure API基于Azure B2C令牌的SFA/MFA验证及适配方案问询

Azure B2C 认证级别验证与资源访问处理方案

我来帮你逐个梳理这些问题的解决方案,都是基于Azure B2C的实际最佳实践:

1. 访问令牌 vs ID令牌:能否验证用户认证级别?

你不需要局限于ID令牌——Azure B2C可以配置为在访问令牌中嵌入认证方式相关的声明,同样能用来验证用户的认证级别:

  • 核心声明是amr(Authentication Methods References):这个数组会记录用户完成认证时使用的方法,比如纯密码登录(SFA)会包含pwd值,完成MFA后会额外添加mfa值。
  • 配置方式:在你的Azure B2C用户流或自定义策略中,确保将amr声明添加到访问令牌的输出声明里(默认ID令牌会包含,但访问令牌需要手动配置)。
  • 当然ID令牌默认也携带amr声明,如果你的架构更依赖ID令牌做身份校验,用它也完全没问题。

2. 用户仅完成SFA时访问MFA端点的正确响应

当用户用SFA令牌访问需要MFA的资源时,API应该返回:

  • HTTP 401 Unauthorized状态码
  • 响应头中添加WWW-Authenticate字段,明确告知客户端需要更高等级的认证:
    WWW-Authenticate: Bearer error="insufficient_authentication", error_description="Multi-factor authentication is required to access this resource"
    

客户端收到这个响应后,应该引导用户跳转至Azure B2C的MFA认证流程(比如指定对应MFA用户流的策略ID),获取包含MFA认证声明的新令牌后,再重新发起请求。

3. 用作用域区分认证级别是否可行?

你提到的把sfa/mfa设为作用域的思路,其实不符合OAuth2作用域的设计初衷——作用域代表的是资源的权限范围,而非用户的认证级别。不过Azure B2C有更合适的方案:

  • 分用户流/策略处理:创建两个独立的用户流:一个仅要求SFA(比如B2C_1_signup_signin_sfa),另一个强制MFA(比如B2C_1_signup_signin_mfa)。客户端请求不同资源时,指定对应的用户流ID(通过认证请求的p参数),只有用户完成对应级别的认证,才能获取到有效令牌。
  • 自定义声明增强:在自定义策略中添加自定义声明(比如auth_level,值为sfa或mfa),并将其包含到访问令牌中。API端直接验证这个声明,判断用户是否满足资源的认证要求。
  • 这种方式的优势是:认证级别与用户流绑定,客户端可以精准引导用户完成对应认证,API端只需验证令牌中的声明即可,无需依赖作用域来区分认证等级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:46:29