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

.NET 6.0 Blazor部署IIS遇MSAL Client_Credentials_Required错误

解决方案

问题根源

你的错误来自两个核心配置问题:一是Azure AD配置字段名不匹配,二是重复添加了冲突的认证中间件,IIS环境下的中间件执行逻辑放大了这些问题,导致机密客户端凭据无法正确加载。

步骤1:修正appsettings.json配置字段

MSAL与Microsoft Identity Web框架默认读取ClientSecret字段而非Secret,这是本地Kestrel兼容但IIS环境下严格校验导致的凭据缺失问题。修改AzureAd配置段:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "<redacted>",
  "TenantId": "consumers",
  "ClientId": "<redacted>",
  "CallbackPath": "/signin-oidc",
  "ClientSecret": "<redacted>" // 将原"Secret"改为"ClientSecret"
},
"MicrosoftGraph": {
  "BaseUrl": "https://graph.microsoft.com/v1.0",
  "Scopes": "user.read"
},

步骤2:移除冲突的认证中间件

AddMicrosoftIdentityWebApp已完整配置Azure AD的OpenID Connect认证,重复添加AddMicrosoftAccount会引入独立的微软账户认证方案,导致回调时认证上下文混乱。删除Program.cs中以下代码块:

builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
    microsoftOptions.ClientId = configuration["AzureAd:ClientId"];
    microsoftOptions.ClientSecret = configuration["AzureAd:Secret"];
});

步骤3:确认IIS部署配置

  1. 应用程序池设置:将.NET CLR版本设为No Managed Code(.NET 6为独立部署,无需IIS托管代码支持);使用ApplicationPoolIdentity或有权限读取appsettings.json的账户。
  2. 重定向URI验证:在Azure AD应用注册的「身份验证」页面,添加IIS部署的完整回调URI(例如https://你的IIS域名/signin-oidc),类型选择「Web」。

步骤4:校验中间件顺序

确保Program.cs中中间件顺序正确,UseAuthentication和UseAuthorization必须在UseRouting之后、UseEndpoints之前:

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

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

app.UseRouting();

// 关键顺序:先认证再授权
app.UseAuthentication();
app.UseAuthorization();

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

app.Run();

完成以上修改后,重新部署到IIS即可解决回调时的内部服务器错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:25:33