更换Azure Graph应用密钥后调用Graph API获取站点遇权限错误排查
以下是仅更换应用密钥后出现该错误的常见原因:
令牌获取流程与权限类型不匹配
若原本使用应用权限(Application Permissions)(对应roles声明),更换密钥后误改用了委托权限的授权流程(如授权码流、密码流,对应scp声明),或反之,都会导致令牌缺少所需的权限声明。比如应用权限必须用客户端凭证流(client_credentials)请求令牌,误用其他流程会生成不包含roles的令牌。新密钥未正确更新到代码/配置中
虽然创建了新密钥,但可能代码里仍使用旧密钥,或复制新密钥时出现输入错误(如漏字符、带空格),导致获取的令牌无效,自然缺少scp或roles字段。可本地解码令牌(用jwt.ms工具离线解析)确认是否存在对应声明。权限同步或令牌缓存延迟
即使权限配置未变,Azure AD的权限同步可能存在延迟,或应用仍在使用缓存的旧令牌。可尝试强制刷新令牌,或在Azure门户重新保存一次应用权限配置触发同步,等待一段时间后再测试。令牌请求的范围参数错误
应用权限场景下,必须指定scope为https://graph.microsoft.com/.default;委托权限场景下需指定具体权限范围(如https://graph.microsoft.com/Sites.Read.All)。若scope参数设置错误,会导致令牌不包含对应权限声明。租户ID/客户端ID配置错误
更换密钥时若误修改了租户ID或客户端ID,会导致请求指向错误的租户,该租户下的应用无对应权限,从而令牌缺少scp或roles声明。
内容的提问来源于stack exchange,提问作者Wajih Siddiqui

