无用户模式获取MS Graph令牌调用用户照片接口返回401问题咨询
问题排查与解决方案
1. 确认权限配置正确性
- 你使用的无用户场景属于客户端凭据流,必须使用应用权限,不能使用委托权限,请确认你配置的
User.Read.All权限类型为「应用权限」而非「委托权限」 - 权限添加完成后必须点击「授予<租户名>的管理员同意」按钮,仅添加权限未完成管理员同意的情况下,权限不会生效
2. 验证访问令牌有效性
- 将获取到的访问令牌粘贴到
jwt.ms中解析,检查令牌的roles声明中是否包含User.Read.All:
客户端凭据流下发的权限会存放在
roles声明中,如果roles为空或没有对应权限,说明权限配置未生效,需要重新配置后清除缓存重新获取令牌
3. 修正请求头构造代码
你当前的Authorization头构造写法不规范,虽然大概率不直接导致401,但建议修改为正确写法避免未知问题:
// 原不规范写法(String.Format使用错误) sender.DefaultRequestHeaders.Add( "Authorization", String.Format("Bearer " + result.AccessToken) ); // 修正后写法 sender.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
4. 确认请求参数正确性
- 确认请求路径中的
<email adress>为目标用户在租户内的有效用户主体名称(UPN)或用户ID,不存在拼写错误 - 确认目标用户属于你的Azure AD租户内的有效用户,不是外部访客用户
以上步骤全部确认无误后重新发起请求即可解决401报错问题。
内容的提问来源于stack exchange,提问作者Sándor Jankovics
相关产品推荐
相关产品推荐

