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

.NET Core应用Azure AD组授权及Microsoft Graph权限疑问

嗨,看你已经在基于Azure AD组的授权上折腾了不少步骤,还成功用客户端凭据调用了Graph,挺棒的!我来帮你理清这两个疑问:

疑问1:能否复用当前已有的令牌调用Microsoft Graph API?

不能直接复用,核心原因是令牌的「受众(aud)」不匹配:

  • 你当前Web API收到的用户令牌,aud字段是你的后端API的ClientId或AppIdUri,这是Azure AD颁发给你的API专用的令牌;
  • 而Microsoft Graph API要求令牌的aud必须是https://graph.microsoft.com,所以这个令牌没法直接用来调用Graph。

那正确的解决方案是使用On-Behalf-Of(OBO,代表用户)流程:你的Web API可以拿着当前用户的令牌,向Azure AD请求一个专门针对Microsoft Graph的委派令牌,再用这个新令牌去调用Graph接口。

在.NET Core里,推荐用Microsoft.Identity.Web库来简化这个流程,不需要手动处理令牌交换逻辑:

  1. 先安装NuGet包:Microsoft.Identity.Web和Microsoft.Identity.Web.MicrosoftGraph
  2. 在Startup.cs的ConfigureServices里修改认证配置:
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
        // 启用下游API令牌获取能力
        .EnableTokenAcquisitionToCallDownstreamApi()
        // 添加Microsoft Graph服务
        .AddMicrosoftGraph(Configuration.GetSection("MicrosoftGraph"))
        // 用内存缓存令牌(生产环境可以换成分布式缓存)
        .AddInMemoryTokenCaches();
  1. 在appsettings.json里添加Graph的配置:
"MicrosoftGraph": {
  "BaseUrl": "https://graph.microsoft.com/v1.0",
  "Scopes": "Group.Read.All"
}

之后在你的控制器里直接注入GraphServiceClient,它会自动完成OBO流程,帮你拿到Graph令牌并调用接口,比如:

private readonly GraphServiceClient _graphClient;

public YourController(GraphServiceClient graphClient)
{
    _graphClient = graphClient;
}

[Authorize(Policy = "GroupsCheck")]
public async Task<IActionResult> GetUserGroups()
{
    // 直接调用Graph获取当前用户的组
    var groups = await _graphClient.Me.MemberOf.Request().GetAsync();
    return Ok(groups);
}
疑问2:获取当前登录用户的组时,应使用委派权限还是应用权限?

必须用委派权限(Delegated Permission),原因如下:

  • 委派权限是以当前登录用户的身份去调用Graph,获取的是该用户实际属于的组(或者用户有权限查看的组),完全匹配你「获取当前登录用户的组」的需求;
  • 应用权限是以你的Web API应用本身的身份去调用Graph,它能获取Azure AD中所有的组(只要权限足够),但这不是“当前用户关联的组”,而且应用权限的权限范围过大,不符合最小权限原则,也没法和当前登录用户的上下文关联起来。

另外要注意:你之前在Azure AD里给WebServicesAPP加的是Group.ReadAll应用权限,现在需要额外添加委派类型的Group.ReadAll权限,然后完成管理员同意,这样OBO流程才能获取到符合要求的Graph令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:17:48