Blazor Server .NET7配置Microsoft Graph与Azure AD SSO时遇认证错误
问题排查与解决方案
错误根源
错误AADSTS700025的核心原因是:你的Azure应用注册被标记为公共客户端,这类客户端不允许提交client_secret或client_assertion。但Blazor Server属于机密客户端(运行在服务器端,可安全存储密钥),因此必须修正应用注册的客户端类型配置。
步骤1:修正Azure门户应用注册配置
- 登录Azure门户,找到目标应用注册
- 进入管理 > 认证页面
- 在高级设置区域,将允许公共客户端流设置为否
- 保存更改
步骤2:确认代码与配置正确性
验证appSettings.json配置
确保AzureAd中的ClientSecret正确,同时推荐使用Graph API的v1.0版本(除非你明确需要beta特性):
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "Domain": "mydomain", "TenantId": "mytenantId", "ClientId": "myClientId", "CallbackPath": "/signin-oidc", "ClientSecret": "mySecret" }, "DownstreamApi": { "BaseUrl": "https://graph.microsoft.com/v1.0", "Scopes": "user.read" }
确认Program.cs配置
你的现有代码逻辑是正确的,无需大幅修改:
string[] initialScopes = builder.Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' '); builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")) .EnableTokenAcquisitionToCallDownstreamApi(initialScopes) .AddMicrosoftGraph(builder.Configuration.GetSection("DownstreamApi")) .AddInMemoryTokenCaches(); builder.Services.AddControllersWithViews(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }); builder.Services.AddAuthorization(options => { options.FallbackPolicy = options.DefaultPolicy; }); builder.Services.AddRazorPages().AddMicrosoftIdentityUI(); builder.Services.AddServerSideBlazor().AddMicrosoftIdentityConsentHandler();
额外说明
- 移除Graph相关配置后登录正常,是因为此时应用仅完成身份验证流程,无需请求下游API,因此不会触发使用
client_secret获取令牌的逻辑 - 微软文档中提到的客户端密钥,仅针对机密客户端(如Blazor Server),公共客户端(如Blazor WASM)才不需要密钥
内容的提问来源于stack exchange,提问作者SlappingTheBass12
相关产品推荐
相关产品推荐

