使用Microsoft.Graph获取AD组成员时出现Authorization授权错误
Microsoft Graph 授权错误解决步骤
错误原因
你收到的Authorization_RequestDenied错误是典型的权限不足问题,根源是当前应用申请的权限范围不包含读取AD组成员的相关权限。
- 第一步:调整本地权限范围配置
你当前appSettings中配置的ida:AppScopes仅包含User.Read.All、Calendars.Read两个权限,缺少读取组成员的权限,按需补充对应权限:- 委托权限(当前代码使用用户登录上下文场景适用,优先选最小权限):添加
GroupMember.Read.All(仅读取组成员)或Group.Read.All(读取所有组相关信息) - 应用权限(后台无用户登录的服务场景适用):添加
GroupMember.Read.All或Group.Read.All
调整后的配置示例:
- 委托权限(当前代码使用用户登录上下文场景适用,优先选最小权限):添加
<appSettings> <add key="ida:AppID" value=[App Id] /> <add key="ida:AppSecret" value=[App Secret] /> <add key="ida:RedirectUri" value="https://localhost:44359/" /> <add key="ida:AppScopes" value="User.Read.All Calendars.Read GroupMember.Read.All" /> </appSettings>
第二步:完成Azure门户侧权限授权
仅修改本地配置不会生效,需要在Azure AD应用注册页完成权限同意:- 登录Azure Portal,进入「Azure Active Directory」→「应用注册」,找到你当前使用的应用
- 左侧菜单选择「API权限」,点击「添加权限」,选择「Microsoft Graph」
- 按照你的认证场景选择「委托权限」/「应用权限」,搜索并勾选刚才补充的
GroupMember.Read.All权限 - 点击「授予<你的租户名称>管理员同意」,完成授权(该操作需要租户全局管理员、应用管理员或云应用管理员权限)
可选排查步骤
如果完成上述操作仍然报错,可以将代码中获取到的result.AccessToken复制到JWT解析工具中,检查scp(委托权限场景)或roles(应用权限场景)声明中是否存在GroupMember.Read.All,确认权限是否正确发放。
注意:如果你使用的是应用权限场景,当前的认证代码需要调整,不能使用AcquireTokenSilent走用户上下文获取令牌,要改用AcquireTokenForClient方法获取客户端凭据令牌。
内容的提问来源于stack exchange,提问作者pcghose
相关产品推荐
相关产品推荐

