Azure Active Directory API调用报错EC001 Claims Missing问题求助
AAD托管API调用返回EC001声明缺失401错误排查方案
1. 令牌有效性校验
- 确认你传递的是**访问令牌(access_token)**而非ID令牌(id_token):ID令牌仅用于客户端侧验证用户身份,不具备API访问授权效力,哪怕你本地解析能看到完整声明,传递给API也会被拒绝
- 验证令牌的
aud(受众)声明是否匹配目标AAD应用的客户端ID/应用ID URI:你用IdentityModel请求令牌时传入的scope参数必须包含目标API暴露的权限标识,例如api://xxxx-xxxx-xxxx-xxxx/.default,如果scope配置为其他应用的标识,返回的令牌受众不匹配,API会直接触发校验失败 - 校验令牌的
iss(签发者)声明是否和目标API信任的签发域一致:AAD令牌的签发者一般为https://sts.windows.net/{租户ID}/或者https://login.microsoftonline.com/{租户ID}/v2.0,如果你请求令牌使用的租户和目标API所属租户不一致,也会被判定为声明异常
2. 请求传输逻辑排查
- 确认
Authorization请求头格式完全合规:必须为Bearer {访问令牌}格式,注意Bearer首字母大写、与令牌之间有且仅有1个空格,令牌首尾不能存在多余空格、换行符或转义字符,你可以通过本地抓包工具确认实际发出去的请求头内容 - 排查令牌传输截断问题:如果JWT长度过长,部分代理、防火墙或服务端配置可能会截断
Authorization头,导致API拿到的令牌不完整,无法解析出全部声明
3. AAD应用配置排查
- 确认你申请的权限已经获得目标API侧的授权:如果是应用权限需要目标租户管理员同意,委托权限需要对应授权人同意,未完成授权的权限哪怕你请求时填对了
scope,返回的令牌中也不会包含对应的roles或scp声明,不少API会将这类权限声明缺失的场景统一返回EC001错误 - 确认目标API无强制要求的可选声明:如果API要求必须携带
upn、email这类可选声明,你需要在自己的AAD应用配置中开启对应可选声明,或在请求令牌时添加对应参数才能获取
4. 交叉校验方案
你可以将拿到的访问令牌粘贴到本地运行的JWT解析工具,和你本地JwtSecurityToken.Claims的内容做二次比对,确认是否存在本地解析漏看的声明缺失情况;也可以将令牌同步给第三方API的运维人员,确认他们侧解析到的声明内容和你侧是否一致,判断是否为API侧的令牌校验逻辑异常。
内容的提问来源于stack exchange,提问作者Rollersitch
相关产品推荐
相关产品推荐

