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

ASP.NET Core 6 MVC部署Azure App Service后报401.1错误如何修复

Azure App Service 部署ASP.NET Core 6 MVC AAD认证返回401.1错误修复

问题现象

  • 技术栈:ASP.NET Core 6 MVC,基于Microsoft.Identity.Web实现Azure AD身份认证
  • 本地运行表现:登录、登出、页面导航全流程正常,输入错误用户名密码可正常返回对应提示
  • 部署表现:相同代码发布到Azure App Service后,访问站点直接触发401.1错误
  • 已排除项:Azure AD应用注册、ClientId等应用注册层面配置错误

相关参考截图:
错误页面截图
WebConfig配置截图
App Service配置截图1
App Service配置截图2
App Service配置截图3

根因说明

本地调试时请求直接由Kestrel服务器处理,所有认证逻辑由代码中集成的Microsoft.Identity组件执行,因此流程正常。部署到Windows计划的Azure App Service时,请求会先经过IIS反向代理层,校验通过后才会转发到应用内部的Kestrel服务。你遇到的401.1错误是IIS层直接返回的认证失败响应,请求根本没有到达你的应用代码,因此和AAD注册配置、代码业务逻辑无关。

修复步骤

按优先级从高到低依次排查:

  • 关闭App Service内置Easy Auth认证(90%以上该场景问题都是这个原因)
    进入App Service的Azure Portal管理页,左侧导航栏找到「设置-认证」菜单,检查是否开启了App Service自带的身份验证/授权功能。如果状态为开启,直接选择关闭并保存配置。
    该功能是App Service提供的平台层认证能力,开启后会在IIS层提前拦截所有未认证请求做鉴权,和你代码中自己实现的Microsoft.Identity认证逻辑完全冲突,直接导致请求还没到应用就被拦截返回401.1。
  • 修正web.config中的IIS层认证配置
    检查发布后wwwroot目录下的web.config文件,在system.webServer > security > authentication节点下,必须仅开启匿名认证,关闭所有其他IIS层认证能力,参考配置如下:
    <system.webServer>
      <security>
        <authentication>
          <anonymousAuthentication enabled="true" />
          <windowsAuthentication enabled="false" />
          <formsAuthentication enabled="false" />
        </authentication>
      </security>
      <!-- 原有aspNetCore模块配置保持默认即可,不要随意修改 -->
      <aspNetCore processPath="dotnet" arguments=".\你的项目dll名.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
    
    注意:ASP.NET Core的认证逻辑完全在应用层执行,IIS层只做反向代理转发,不需要开启任何IIS自带的认证规则,否则会提前拦截请求。
  • 校验aspNetCore模块托管配置
    确认web.config中aspNetCore节点的hostingModel属性为inprocess(项目模板默认生成的配置就是该值,没有特殊需求不要修改为outofprocess),同时不要在web.config中手动添加IIS URL授权规则限制匿名访问。
  • 补充转发头配置(可选,解决登录回调异常问题)
    如果完成上述步骤后可以正常进入登录页,但AAD登录回调时出现异常,在Program.cs中添加转发头中间件,适配Azure App Service的代理环境,注意该中间件必须在所有其他中间件之前调用:
    builder.Services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto;
        options.KnownNetworks.Clear();
        options.KnownProxies.Clear();
    });
    
    var app = builder.Build();
    // 第一行加该配置
    app.UseForwardedHeaders();
    
    // 后续其他中间件(UseHttpsRedirection、UseStaticFiles、UseAuthentication等)保持原有顺序不变
    

所有配置修改完成后,重启App Service实例,清空浏览器缓存再访问站点,即可正常进入AAD登录流程,表现和本地运行完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:01:42