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

.NET 6 Blazor Server集成Graph API遇文档缺失及服务注册问题求助

.NET 6 Blazor Server 集成 Graph API 解决方案

1. 安装必要NuGet包

先安装两个核心依赖包:

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

可通过CLI命令快速安装:

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

2. 配置Program.cs(.NET 6 顶级语法)

这是解决ITokenAcquisition服务未注册报错的核心步骤,务必调用.EnableTokenAcquisitionToCallDownstreamApi(),完整配置代码如下:

var builder = WebApplication.CreateBuilder(args);

// 注册Azure AD认证并开启下游API调用支持
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi() // 必须添加此方法注册ITokenAcquisition服务
    .AddMicrosoftGraph(builder.Configuration.GetSection("MicrosoftGraph")) // 集成Graph API
    .AddInMemoryTokenCaches(); // 用内存缓存存储令牌

// 注册Blazor Server相关服务
builder.Services.AddControllersWithViews()
    .AddMicrosoftIdentityUI();

builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor()
    .AddMicrosoftIdentityConsentHandler();

var app = builder.Build();

// 中间件配置
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

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

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

app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.MapControllers();

app.Run();

3. 配置appsettings.json

替换成你的Azure AD租户、应用注册信息及需要的Graph API权限:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "你的租户域名(如xxx.onmicrosoft.com)",
    "TenantId": "你的租户ID",
    "ClientId": "你的应用注册客户端ID",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath ": "/signout-callback-oidc"
  },
  "MicrosoftGraph": {
    "BaseUrl": "https://graph.microsoft.com/v1.0",
    "Scopes": "User.Read Mail.Read" // 根据业务需求添加权限范围
  }
}

4. 在Blazor组件中调用Graph API

注入GraphServiceClient即可直接调用,记得添加[Authorize]确保用户已认证:

@page "/graph-profile"
@inject GraphServiceClient GraphClient
@attribute [Authorize]

<h3>我的个人信息</h3>

@if (currentUser != null)
{
    <div>
        <p>姓名: @currentUser.DisplayName</p>
        <p>邮箱: @currentUser.Mail</p>
        <p>用户ID: @currentUser.Id</p>
    </div>
}
else
{
    <p>加载中...</p>
}

@code {
    private User currentUser;

    protected override async Task OnInitializedAsync()
    {
        try
        {
            currentUser = await GraphClient.Me.Request().GetAsync();
        }
        catch (Exception ex)
        {
            // 处理令牌获取失败、权限不足等异常
            Console.WriteLine(ex.Message);
        }
    }
}

关键提醒

  • 必须在AddMicrosoftIdentityWebApp()之后调用.EnableTokenAcquisitionToCallDownstreamApi(),否则会出现ITokenAcquisition服务未注册的报错。
  • 需在Azure AD应用注册中添加对应的Graph API权限,并完成管理员同意操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:12:47