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

Azure AD B2C中/token未返回Access Token,React SPA无法获取访问令牌

排查Azure AD B2C React SPA未返回Access Token的问题

核心配置检查

  • API权限验证:

    1. 在SPA应用注册里,确认已添加Web API的委派权限,勾选所需权限(比如自定义的access_as_user类权限),并完成管理员同意授权(B2C场景下多数权限需要提前完成这一步,否则登录时无法获取权限)。
    2. 检查Web API应用注册的公开API设置,确保已定义正确的权限范围(Scope),且SPA应用已被授权访问这些范围。
  • authConfig.js参数校验:
    SPA配置里的scopes字段必须包含Web API的完整范围URI,格式为https://<你的B2C租户域名>/<Web API客户端ID>/<权限范围名称>,示例代码:

    export const authConfig = {
      // 其他配置项
      scopes: ["https://contoso.b2clogin.com/00000000-0000-0000-0000-000000000000/api/scope/access_as_user"]
    };
    

    注意不能只写权限名称,必须带完整前缀,否则B2C无法识别对应的API资源。

登录请求与令牌端点排查

  • 授权请求的scope参数检查:
    打开浏览器开发者工具网络面板,找到登录时的authorize端点GET请求,确认scope参数同时包含openid(获取ID Token必需)和Web API的完整范围,示例:
    scope=openid https://contoso.b2clogin.com/00000000-0000-0000-0000-000000000000/api/scope/access_as_user

  • 令牌请求的grant_type验证:
    若用授权码流+PKCE,令牌请求的grant_type需为authorization_code,且携带code_verifier等PKCE参数;若用隐式流,授权请求要添加response_type=id_token token,确保同时获取两种令牌。

B2C用户流/自定义策略配置

  • 用户流令牌设置:
    在Azure AD B2C的用户流(如SignUpSignIn)中,进入应用程序令牌部分,确认已勾选访问令牌,令牌生命周期保持默认即可。
    若使用自定义策略,需确保RelyingParty节点包含对应DefaultUserJourney的输出声明,且TechnicalProfile正确配置了Access Token的颁发逻辑。

应用注册认证设置

  • SPA重定向URI类型:
    确认SPA应用注册的重定向URI类型为SPA,而非Web类型——B2C对SPA有专属认证流程支持,类型错误会导致令牌颁发异常。
  • Web API受众(Audience)一致性:
    Web API应用注册的公开API中,应用ID URI必须与SPA请求中scope的前缀完全一致,比如https://contoso.b2clogin.com/00000000-0000-0000-0000-000000000000/api,这个URI不能包含特殊字符,且需唯一。

常见误区提醒

  • 不要照搬Entra ID的配置逻辑:虽然同属Microsoft身份平台,但B2C的权限配置、用户流/策略是独立的,比如B2C没有“企业应用”概念,所有权限配置都在应用注册的API权限中完成。
  • 避免遗漏scope完整URI:很多时候只写权限名称而忽略前缀,导致B2C无法匹配到对应Web API资源,进而不返回Access Token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:05:01