.NET 6 Blazor Server集成Graph API遇文档缺失及服务注册问题求助
.NET 6 Blazor Server 集成 Graph API 解决方案
1. 安装必要NuGet包
先安装两个核心依赖包:
Microsoft.Identity.WebMicrosoft.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
相关产品推荐
相关产品推荐

