使用带Sites.Read.All权限的托管身份调用Microsoft Graph Search API遇401未授权
- 权限范围不匹配:虽然你给托管身份分配了
Sites.Read.All权限,但Microsoft Graph Search API的/search/query端点需要的是Search.Query.All应用权限——Sites.Read.All仅能读取站点内容,无法授权执行搜索查询操作。 - 令牌受众(Audience)错误:检查获取的JWT令牌里的
aud声明,确认值是https://graph.microsoft.com。如果托管身份拿令牌时指定了错误的资源URI,Graph API会直接拒绝该令牌。 - 权限未同步生效:Azure AD给托管身份分配应用权限后,通常需要15-30分钟才能完全同步,要是刚分配完就测试,大概率会碰到权限还没生效的问题。
- 令牌缺少必要角色声明:把JWT令牌解码(本地用JWT工具就行),看看
roles字段里有没有包含所需的权限。如果没有,说明权限分配没成功或者还没同步到位。 - 查询资源超出权限:就算权限配置对了,要是搜索查询试图访问托管身份无权读取的资源(比如跨租户站点、受限文档库),也可能返回401(这种情况更多见403,但部分场景下会触发401)。
- 托管身份配置错误:确认用的是系统托管身份还是用户托管身份,检查身份是否正确关联到你的应用/服务,且获取令牌时指定了正确的身份ID或名称。
内容的提问来源于stack exchange,提问作者cb0008
相关产品推荐
相关产品推荐

