Azure注册React应用调用API遇令牌签名/受众无效问题求助
Azure AD + MSAL 令牌验证错误排查方案
核心误区:ID Token 不能用于调用受保护 API
你用ID Token调用API触发的audience is invalid是必然问题——ID Token的aud声明是你的React应用客户端ID,而API期望的受众是它自身的应用ID URI/客户端ID。必须使用Access Token调用API,ID Token仅用于前端验证用户身份。
Access Token 签名/密钥错误的排查步骤
1. 确认API权限与请求Scope配置
- 检查当前React应用的Azure AD配置:已添加目标API的Delegated权限,且完成管理员同意(若权限需租户级授权),权限范围要和能正常运行的应用完全一致。
- 调用MSAL的
acquireTokenSilent/acquireTokenPopup时,必须传入目标API的完整Scope,格式为api://<API客户端ID>/<权限名称>(例如api://123456/user.read),不能只传React应用的客户端ID。
2. 核对应用令牌版本配置
- 查看应用清单的
accessTokenAcceptedVersion字段:- 若目标API使用v2.0令牌,该字段需设为
2; - 若API使用v1.0令牌,设为
1或留空。
确保该值和正常运行的应用完全一致。
- 若目标API使用v2.0令牌,该字段需设为
3. 验证令牌声明的正确性
在浏览器控制台用以下代码解析Access Token的payload,检查关键声明:
const token = "你的Access Token"; const payload = JSON.parse(atob(token.split('.')[1])); console.log(payload);
- 确认
aud是目标API的应用ID URI/客户端ID; - 确认
iss(颁发者)与API预期的一致(v1.0格式:https://sts.windows.net/<租户ID>/;v2.0格式:https://login.microsoftonline.com/<租户ID>/v2.0); - 确认
scp字段包含你请求的API权限范围。
4. 检查API的令牌验证逻辑
- 确保API没有硬编码特定应用的验证密钥,而是通过Azure AD的OpenID元数据端点(如v2.0的
https://login.microsoftonline.com/<租户ID>/v2.0/.well-known/openid-configuration)动态获取签名密钥; - 确认API接受的令牌版本(v1.0/v2.0)与你的应用请求的版本匹配。
5. 核对应用的基础配置
- 检查应用清单的
signInAudience字段,确保和正常应用一致(比如都是AzureADMyOrg); - 若API启用了令牌加密,确认当前应用的
tokenEncryptionKeyId配置与正常应用匹配(如果不需要加密,该字段应留空)。
内容的提问来源于stack exchange,提问作者Satish Jadhav
相关产品推荐
相关产品推荐

