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

ASP.NET Core 3.1部署IIS遇401.2未授权错误,求解决方案

解决ASP.NET Core 3.1 Azure AD认证部署IIS后401.2错误(禁用匿名认证)

原因分析

禁用匿名认证后,IIS默认会触发自身的认证逻辑,但你又不能启用Windows认证,这就导致请求还没到达ASP.NET Core的Azure AD认证中间件,就被IIS拦截返回401.2错误。核心解决思路是让IIS跳过自身认证,把请求完整传递给ASP.NET Core应用,由应用的Azure AD认证流程处理。

具体解决步骤

1. 修改web.config配置,让IIS pass-through请求

在应用的web.config中,调整<aspNetCore>和<security>节点,明确告诉IIS不处理认证:

<system.webServer>
  <aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" forwardWindowsAuthToken="false" />
  <security>
    <authentication>
      <anonymousAuthentication enabled="false" />
      <windowsAuthentication enabled="false" />
    </authentication>
  </security>
</system.webServer>

关键是forwardWindowsAuthToken="false",它会阻止IIS自行尝试认证,直接把请求交给ASP.NET Core管道。

2. 确认ASP.NET Core认证中间件顺序正确

在Startup.cs里,保证认证中间件在授权中间件之前加载,且全局授权策略要求用户认证:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseStaticFiles();
    app.UseRouting();

    // 先加载认证中间件,再加载授权
    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

同时检查ConfigureServices里的Azure AD配置是否正确:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
        .AddAzureAD(options => Configuration.Bind("AzureAd", options));

    services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    });
}

3. 检查IIS应用程序池设置

  • 应用程序池的.NET CLR版本必须设为无托管代码,因为是.NET Core应用。
  • 应用程序池身份建议用ApplicationPoolIdentity,并确保该账户拥有应用目录的读写权限(尤其是日志目录)。

4. 验证IIS站点认证设置

在IIS管理器中找到你的站点,进入「认证」功能:

  • 确认匿名认证已禁用
  • 确认Windows认证已禁用
  • 不需要启用其他IIS自带的认证方式

验证配置

完成上述操作后,重启IIS站点和应用程序池,访问应用时会自动跳转到Azure AD登录页面,登录成功后即可正常访问,不会再出现401.2错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:19:57