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身份。如果要获取登录用户的身份,需要做如下调整:
- 本地调试时修改
launchSettings.json里的iisSettings配置:
"iisSettings":{ "windowsAuthentication": true, "anonymousAuthentication": false ... }
- 调整接口代码:
[Route("getUser")] [HttpGet] public IActionResult GetUser() { // 该属性现在会返回访问用户的Windows账号名 var loginUser = User.Identity.Name; return Ok(loginUser); }
4. 验证站点配置
- 打开IIS站点的「身份验证」功能,确认匿名认证已禁用、Windows认证已启用
- 确认应用池的.NET CLR版本确实为「无托管代码」、托管管道模式为「集成」
- 重启站点和应用池后再次访问接口验证
内容的提问来源于stack exchange,提问作者Guy E
相关产品推荐
相关产品推荐

