Azure AD/MSAL应用调用接口报权限不足如何确定所需API权限
权限问题定位与配置方法
你收到的ErrorInsufficientPermissionsInAccessToken错误,搭配返回信息里的ProfileAccessDeniedException,已经明确指向根因:你拿到的访问令牌里携带的权限,不足以支撑当前调用/me接口读取用户档案的需求,不需要额外排查其他问题,结合你调用的接口就能直接确定需要配置的权限,步骤如下:
- 第一步先校验当前令牌的实际权限:不要只看Azure门户的应用配置,把你拿到的
ACCESS_TOKEN本地做JWT解析,查看scp(用户登录的委托场景)或者roles(应用身份的守护进程场景)字段,就能看到当前令牌实际生效的权限,多数权限不生效问题都是配置完权限没重新拿令牌、或者请求令牌时填错了scope导致的。 - 针对你调用的
GET https://graph.microsoft.com/v1.0/me接口,分两种场景配置对应权限:委托权限场景(带登录用户上下文,也就是你用MSAL做了用户登录后拿的令牌)
最低只需要配置User.Read委托权限即可,配置完成后需要点击「授予管理员同意」(工作/学校账号租户场景),个人微软账号场景用户登录时自行同意即可。更高权限比如User.ReadWrite、User.Read.All也能满足调用要求,但遵循最小权限原则选User.Read就够,不要过度授权。应用权限场景(无用户登录,服务/后台任务直接调用)
注意/me接口本身依赖登录用户上下文,纯应用身份调用这个接口本身不符合接口设计,哪怕给了全权限也容易报错。这种场景请把接口替换为/v1.0/users/{目标用户的object ID},对应的最低应用权限是User.Read.All,配置后必须完成管理员同意才能生效。 - 常见踩坑提醒:
- 权限配置修改后,之前签发的旧访问令牌不会自动更新权限,必须重新触发MSAL的认证流程获取新令牌,否则用旧令牌调用会一直报权限错误。
- 用MSAL请求令牌时,scope必须指定为微软Graph对应的权限值,比如
https://graph.microsoft.com/User.Read,如果填错了资源地址(比如填成了旧版AAD Graph或者其他自定义API地址),哪怕门户里配了Graph权限,令牌里也不会携带对应权限。 - 如果你的应用配置成了仅支持个人账号,不要配置租户级的管理员同意,走用户正常登录授权流程即可。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

