You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Azure AD Graph API组端点时遇401未授权问题求助

解决Azure AD Graph API组查询401未授权问题

既然你说访问令牌在其他接口能正常工作,那问题基本出在令牌的权限范围或者应用注册的权限配置上,针对你的场景,我整理了几个排查和解决步骤:

1. 检查应用注册的权限配置

你需要确保.NET Core应用在Azure AD的应用注册中,已添加针对Azure AD Graph API的正确权限,并且完成了管理员同意(应用权限场景下必需):

  • 登录Azure门户,找到你的应用注册,进入「API权限」页面
  • 点击「添加权限」,选择「Azure Active Directory Graph」
  • 根据你的业务场景选择权限:
    • 如果是用户上下文(代表登录用户查询),选Delegated权限里的Directory.Read.All或Group.Read.All
    • 如果是应用上下文(后台服务,不依赖用户登录),选Application权限里的Directory.Read.All或Group.Read.All
  • 别忘了点击「授予管理员同意」(租户级权限必须由管理员操作)

2. 验证令牌的权限声明

你可以用https://jwt.ms解码访问令牌,检查里面的权限字段:

  • 委托权限场景:看scp字段是否包含Directory.Read.All或Group.Read.All
  • 应用权限场景:看roles字段是否有对应的权限
    如果没有这些声明,说明获取令牌时请求的范围不对:
  • 委托权限:获取令牌的scope参数要包含https://graph.windows.net/Directory.Read.All
  • 应用权限:客户端凭据流的resource参数要设为https://graph.windows.net

3. 确认API端点与资源匹配

你用的https://graph.windows.net/myorganization/groups?api-version=1.6&$filter=displayName eq 'My group name'是Azure AD Graph的旧端点,要注意:

  • 确保获取令牌时的resource参数是https://graph.windows.net,而不是Microsoft Graph的https://graph.microsoft.com(这两个API的令牌不通用)
  • 推荐迁移到Microsoft Graph API,端点为https://graph.microsoft.com/v1.0/groups?$filter=displayName eq 'My group name',对应权限是Group.Read.All,这是微软现在主推的API,功能更全也更稳定

4. 代码层面的细节检查

确保HttpWebRequest的Authorization头设置正确,别漏了Bearer后面的空格:

var request = (HttpWebRequest)WebRequest.Create("https://graph.windows.net/myorganization/groups?api-version=1.6&$filter=displayName eq 'My group name'");
request.Headers["Authorization"] = $"Bearer {accessToken}";
request.Method = "GET";

5. 用户权限排查(委托场景)

如果是代表登录用户查询,还要确认该用户本身有读取组的权限——不过一般来说,只要应用有Directory.Read.All的委托权限,用户就能正常查询,除非租户有特殊权限限制。

按照上面的步骤排查,应该就能解决401的问题了。

内容的提问来源于stack exchange,提问作者Paul Angelno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:15:37