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

ASP.NET Core 2.2部署IIS后web.config认证段报500.19配置错误如何解决?

错误根因

该500.19错误的核心是IIS默认将anonymousAuthentication和windowsAuthentication的配置节锁定在服务器级别,不允许站点级的web.config直接修改这些配置。


解决步骤

1. 解锁IIS服务器级的身份验证配置节

两种操作方式可选:

方式1:通过IIS管理器操作

  • 打开IIS管理器,在左侧连接树选中你的服务器根节点,双击中间面板的「功能委派」
  • 找到「身份验证 - 匿名」和「身份验证 - Windows」两项,将它们的权限都设置为「读取/写入」
  • 重启IIS服务生效

方式2:通过命令行操作

以管理员身份运行cmd,执行以下两条命令:

%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/security/authentication/anonymousAuthentication
%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/security/authentication/windowsAuthentication

2. 修正web.config配置

你当前的web.config包含冗余的旧版ASP.NET配置,还存在笔误,调整后内容如下:

<system.webServer>
    <aspnetCore processPath="你的应用exe路径" forwardWindowsAuthToken="true" hostingModel="InProcess">
    </aspnetCore>
    <security>
        <authentication>
            <anonymousAuthentication enabled="false" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>
  • 删掉<system.web>整段配置,这段是用于.NET Framework的ASP.NET应用,ASP.NET Core不需要该配置
  • 修正你之前拼写错误的hsotingModel为正确的hostingModel

3. 调整代码逻辑获取正确的访问用户身份

你当前代码里用System.Security.Principal.WindowsIdentity.GetCurrent()拿到的是IIS应用池的运行标识(也就是你设置的ApplicationPoolIdentity),不是访问站点的用户的Windows身份。如果要获取登录用户的身份,需要做如下调整:

  1. 本地调试时修改launchSettings.json里的iisSettings配置:
"iisSettings":{
    "windowsAuthentication": true,
    "anonymousAuthentication": false
    ...
}
  1. 调整接口代码:
[Route("getUser")]
[HttpGet]
public IActionResult GetUser()
{
    // 该属性现在会返回访问用户的Windows账号名
    var loginUser = User.Identity.Name;
    return Ok(loginUser);
}

4. 验证站点配置

  • 打开IIS站点的「身份验证」功能,确认匿名认证已禁用、Windows认证已启用
  • 确认应用池的.NET CLR版本确实为「无托管代码」、托管管道模式为「集成」
  • 重启站点和应用池后再次访问接口验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:48:04