Azure AD B2C中/token未返回Access Token,React SPA无法获取访问令牌
排查Azure AD B2C React SPA未返回Access Token的问题
核心配置检查
API权限验证:
- 在SPA应用注册里,确认已添加Web API的委派权限,勾选所需权限(比如自定义的
access_as_user类权限),并完成管理员同意授权(B2C场景下多数权限需要提前完成这一步,否则登录时无法获取权限)。 - 检查Web API应用注册的公开API设置,确保已定义正确的权限范围(Scope),且SPA应用已被授权访问这些范围。
- 在SPA应用注册里,确认已添加Web API的委派权限,勾选所需权限(比如自定义的
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
相关产品推荐
相关产品推荐

