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

ASP.NET Core MVC集成Microsoft Graph API认证方案咨询

我懂你不想手动写POST请求拿AccessToken的麻烦——ASP.NET Core其实有官方的成熟方案,能把Microsoft Graph API和你现有的网站认证无缝整合,完全不用自己处理Token的获取、缓存、刷新这些繁琐流程。下面是具体的实现步骤,都是官方推荐的最优实践:

最优方案:借助Microsoft Identity Web集成Graph API

核心思路是用Microsoft.Identity.Web这个官方包,它专门为ASP.NET Core项目简化Azure AD与Graph API的集成逻辑,能自动衔接你现有的认证体系。

步骤1:安装必要的NuGet包

先给项目装上两个关键包,用来处理身份认证和Graph API调用:

  • Microsoft.Identity.Web
  • Microsoft.Identity.Web.MicrosoftGraph

可以通过Package Manager Console执行:

Install-Package Microsoft.Identity.Web
Install-Package Microsoft.Identity.Web.MicrosoftGraph

或者用.NET CLI命令:

dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.MicrosoftGraph

步骤2:配置appsettings.json

把你的Azure AD信息和Graph API权限配置到配置文件里,替换成你自己的AppID、Secret和租户信息:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "你的租户域名.onmicrosoft.com",
  "TenantId": "你的租户ID",
  "ClientId": "你的应用ID",
  "ClientSecret": "你的应用密钥",
  "CallbackPath": "/signin-oidc"
},
"MicrosoftGraph": {
  "BaseUrl": "https://graph.microsoft.com/v1.0",
  "Scopes": "User.Read Mail.Read" // 这里填你在Azure端已配置好的权限范围
}

步骤3:在Program.cs中注册服务

修改项目的启动文件,把身份认证和Graph API服务注入到容器,和你现有的认证体系打通:

var builder = WebApplication.CreateBuilder(args);

// 添加Microsoft Identity认证,并集成Graph API
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddMicrosoftGraph(builder.Configuration.GetSection("MicrosoftGraph"))
    .AddInMemoryTokenCaches();

// 配置授权策略,确保默认授权规则生效
builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});

builder.Services.AddControllersWithViews();

var app = builder.Build();

// 中间件配置(注意顺序:认证必须在授权之前)
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

步骤4:在Controller中直接调用Graph API

现在你可以在任意Controller里直接注入GraphServiceClient,框架会自动帮你处理Token相关的所有逻辑:

public class HomeController : Controller
{
    private readonly GraphServiceClient _graphServiceClient;

    public HomeController(GraphServiceClient graphServiceClient)
    {
        _graphServiceClient = graphServiceClient;
    }

    public async Task<IActionResult> Index()
    {
        // 示例:获取当前登录用户的基本信息
        var currentUser = await _graphServiceClient.Me.GetAsync();
        ViewData["UserName"] = currentUser.DisplayName;
        ViewData["UserEmail"] = currentUser.Mail;

        // 如果你需要调用其他权限的API,只要Scopes里配置了对应权限就能直接调用
        // 比如获取用户的邮件列表:var messages = await _graphServiceClient.Me.Messages.GetAsync();

        return View();
    }
}

为什么这是最优方案?

  • 自动Token管理:完全不用手动写POST请求拿Token,框架会自动处理获取、缓存、过期刷新的全流程
  • 无缝兼容现有认证:和你已有的ASP.NET Core认证体系完美衔接,用户登录后直接就能使用Graph API
  • 权限安全可控:严格遵循你在Azure AD中配置的权限范围,避免越权调用

如果你之前有自定义的认证逻辑,只需要确保AddAuthentication的默认Scheme和现有逻辑一致,或者调整Scheme优先级即可,这个方案完全兼容现有流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:46:25