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

部署至本地IIS 10(Windows Server 2019)后,集成Microsoft Identity认证(Azure AD)的Blazor Server应用陷入认证循环问题

解决Blazor Server + Azure AD认证部署到IIS后失败的问题

我之前碰到过和你几乎一模一样的Blazor Server + Azure AD认证部署问题——本地测试完全正常,一放到IIS就卡认证流程,要么报请求头过长的错误,要么直接登不上。给你几个实际验证有效的排查方向:

  • 调整IIS请求头大小限制
    你遇到的Bad Request - Request Too Long,本质是认证过程中生成的Correlation和Nonce Cookie堆积,导致请求头超出了IIS默认限制。解决步骤:

    1. 打开IIS管理器,选中你的目标站点
    2. 打开配置编辑器,在“节”下拉框选择system.webServer/security/requestFiltering
    3. 找到requestLimits节点,修改headerSizeLimit为65536(64KB,可根据实际情况再调大)
    4. 再切换到system.webServer/serverRuntime节,修改maxRequestHeaderSize为同样数值
    5. 保存配置后重启站点
  • 优化认证Cookie配置
    默认的认证Cookie设置在IIS环境下可能导致临时Cookie清理不及时、堆积过多。可以在Program.cs里调整Cookie和OpenID Connect的配置:

    // 配置Azure AD认证
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
        .EnableTokenAcquisitionToCallDownstreamApi()
        .AddInMemoryTokenCaches();
    
    // 自定义Cookie设置,避免临时Cookie堆积
    builder.Services.Configure<CookieAuthenticationOptions>(CookieAuthenticationDefaults.AuthenticationScheme, options =>
    {
        options.Cookie.Name = ".YourAppAuthCookie"; // 自定义Cookie名称,避免冲突
        options.Cookie.SameSite = SameSiteMode.Lax;
        options.Cookie.MaxAge = TimeSpan.FromHours(1);
        options.SlidingExpiration = true;
        options.Cookie.HttpOnly = true;
        options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // 生产环境建议强制HTTPS
    });
    

    同时要确保Azure AD应用注册里的重定向URI完全匹配部署后的站点地址(比如https://your-domain.com/signin-oidc),本地测试和生产环境的URI要分开注册,不能混用。

  • 确认IIS WebSockets协议已正确启用
    虽然你提到已经安装了WebSockets组件,但要确认站点级别的WebSockets是开启的:

    1. 在IIS管理器的站点“功能视图”里找到WebSockets协议
    2. 确保它处于启用状态(如果没启用,右键点击选择“启用”)
      Blazor Server依赖WebSockets维持连接,认证流程中如果WebSocket不通,可能导致跳转异常和Cookie堆积。
  • 更新ASP.NET Core托管运行时
    旧版本的.NET 6.0托管运行时在IIS环境下可能存在认证相关的Bug,建议去微软官网下载最新的.NET 6.0托管运行时重新安装,安装完成后重启服务器再测试。

  • 启用详细日志排查
    如果上面的方法都没解决,开启详细的认证日志来定位具体问题:
    在appsettings.json里添加日志配置:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore.Authentication": "Debug",
          "Microsoft.Identity.Web": "Debug",
          "Microsoft.AspNetCore.Server.IISIntegration": "Debug"
        }
      }
    }
    

    然后查看IIS站点的日志文件(默认在C:\inetpub\logs\LogFiles),或者用日志框架把日志输出到文件,这样能看到认证流程中每一步的错误细节,比如重定向URI不匹配、Token获取失败等。

我当时是通过调整IIS请求头大小和优化Cookie配置解决了问题,你可以按顺序试试这些方法,应该能搞定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:02:29