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

ASP.NET Core 2.1中如何获取Azure AD令牌访问O365 Graph API资源?

获取Graph API访问令牌的新方法(ASP.NET Core 2.1+)

这个问题我之前也碰到过!ASP.NET Core 2.1推出的AddAzureAd确实简化了Azure AD身份验证的配置,但也把之前手动处理的授权码逻辑给封装起来了。不过不用慌,现在有更简洁的方式来获取Graph API所需的访问令牌,具体步骤如下:

1. 安装必要的NuGet包

首先确保你的项目安装了这些依赖:

  • Microsoft.AspNetCore.Authentication.AzureAD.UI:提供AddAzureAd配置能力
  • Microsoft.Identity.Client:处理令牌的获取、缓存与刷新
  • Microsoft.Graph:Graph API官方客户端库

可以通过NuGet包管理器或命令行安装:

Install-Package Microsoft.AspNetCore.Authentication.AzureAD.UI
Install-Package Microsoft.Identity.Client
Install-Package Microsoft.Graph

2. 配置AppSettings.json

在配置文件中补充Azure AD信息和Graph API的权限范围:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "你的O365域名.onmicrosoft.com",
  "TenantId": "你的租户ID",
  "ClientId": "你的应用客户端ID",
  "ClientSecret": "你的应用客户端密钥",
  "CallbackPath": "/signin-oidc"
},
"GraphApi": {
  "Scopes": "Calendars.Read"
}

3. 配置Startup.cs

在ConfigureServices方法中,除了配置Azure AD身份验证,还要注册令牌获取服务和Graph客户端:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    // 配置Azure AD身份验证
    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
        .AddAzureAD(options => Configuration.Bind("AzureAd", options));

    // 注册令牌获取服务,自动处理令牌生命周期
    services.AddTokenAcquisition();

    // 注入Graph API客户端,关联令牌获取逻辑
    services.AddScoped<IGraphServiceClient>(sp =>
    {
        var tokenAcquisition = sp.GetRequiredService<ITokenAcquisition>();
        var graphScopes = Configuration.GetSection("GraphApi:Scopes").Get<string[]>();
        
        return new GraphServiceClient(new DelegateAuthenticationProvider(async request =>
        {
            // 获取当前用户的Graph API访问令牌
            var accessToken = await tokenAcquisition.GetAccessTokenForUserAsync(graphScopes);
            // 将令牌添加到请求头
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        }));
    });
}

4. 在Razor Page中调用Graph API

现在你可以直接在PageModel里注入IGraphServiceClient,轻松调用Graph API获取资源(比如你的日历):

public class CalendarModel : PageModel
{
    private readonly IGraphServiceClient _graphClient;

    public CalendarModel(IGraphServiceClient graphClient)
    {
        _graphClient = graphClient;
    }

    public List<Event> UpcomingEvents { get; set; }

    public async Task OnGetAsync()
    {
        // 获取当前用户的近期日历事件
        var eventsResult = await _graphClient.Me.Events
            .Request()
            .Select(e => new { e.Subject, e.Start, e.End })
            .Top(10)
            .GetAsync();

        UpcomingEvents = eventsResult.CurrentPage.ToList();
    }
}

关键注意点

  • 权限配置:一定要在Azure门户中给你的应用添加对应的Graph API权限(比如Calendars.Read),如果是租户级权限,还需要管理员授予同意。
  • 令牌自动管理:ITokenAcquisition服务已经封装了令牌的缓存和刷新逻辑,不用再手动处理授权码交换和令牌存储,省心很多。
  • 版本升级建议:如果后续升级到ASP.NET Core 3.1及以上版本,更推荐使用Microsoft.Identity.Web包,它提供了AddMicrosoftIdentityWebApp和AddMicrosoftGraph等更简洁的API,能一步完成身份验证和Graph集成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:20:36