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

从SPA调用Web API遇Azure AD B2C错误:令牌缺失scp或roles声明

问题原因及解决办法

核心问题1:令牌请求用错了Client ID

你当前请求令牌时填的client_id: api_appid是Web API的应用ID,但SPA作为客户端,请求令牌时必须使用SPA应用自己的Client ID。Azure AD B2C会根据客户端ID和授予的权限,在令牌中注入对应的scp(范围)声明,用错Client ID的话,令牌里不会包含目标API的权限声明。

核心问题2:确认权限配置的完整性

即使修正了Client ID,还要检查以下两点:

  • 确保在SPA应用的API权限列表里,api.read权限的状态是已授予管理员同意(Azure AD B2C中需要手动点击授予,否则用户登录时不会获取到该权限的声明)。
  • 检查你使用的用户流,确保在用户流的「应用程序声明」中,勾选了**范围(scp)**选项,这样令牌才会包含scp字段。

修正后的令牌请求示例

把client_id替换为SPA应用的ID,其他参数保持不变:

POST https://tenant.b2clogin.com/tenant.onmicrosoft.com/policy/oauth2/v2.0/token
grant_type: authorization_code
client_id: spa_appid  # 替换为SPA应用的Client ID
scope: https://tenant.onmicrosoft.com/web_api/api.read
redirect_uri: https://localhost:435
code: [授权码]
code_verifier: [验证器]

验证令牌内容

拿到新令牌后,用本地JWT解码工具查看是否包含scp字段且值为api.read,确认无误后再调用Web API即可解决报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:10:33