Problem
当在 IIS 后面托管 Asp.Net Core 2.0 或 2.1 Web 应用程序且 Windows 身份验证设置为 true 且匿名身份验证设置为 false 时,User.Identity.Name
属性为 null 并且User.Identity.IsAuthenticated
是假的。
根据文档here https://learn.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.1,当使用 IIS 托管时,Windows 身份验证应该仅适用于 Asp.Net Core 2.x。
背景
我正在将 Asp.Net 4.x MVC 应用程序迁移到 Asp.Net Core,遵循以下步骤从 ASP.NET MVC 迁移到 ASP.NET Core MVC 指南 https://learn.microsoft.com/en-us/aspnet/core/migration/mvc?view=aspnetcore-2.1.
我正在服务器上测试该站点,该服务器当前托管使用 Windows 身份验证的 Asp.Net 4.x MVC 应用程序,没有任何问题。 Windows 用户的身份按预期可用。
完成迁移指南并修复所有构建问题后,我在 Web 项目属性中的“调试”下创建了一个“本地 IIS”配置文件,并将“启动”选项设置为“IIS”。我只勾选了“启用 Windows 身份验证”,然后浏览到该网站。尽管使用有效的域凭据登录,User.Identity.Name
仍然为空。
我在开始迁移过程之前安装了 .Net Core 2.1 SDK,并且之前安装了 .Net Core 1.0.1 SDK Preview。服务器运行 Windows 2008 R2 和 IIS 7。
我尝试过的
为了确保我在迁移过程中没有引入此问题,我使用 MVC 模板并针对 .NET Framework 4.7.2 创建了一个新的 ASP.NET Core Web 应用程序。我在选择模板时配置了“Windows 身份验证”。在确认使用 IIS Express 时 Windows 身份验证有效后,我按上述方式配置了本地 IIS。当浏览到IIS下时,导航栏右上角显示“Hello, !”。我使用 Asp.Net Core SDK 2.0 和 2.1 中的模板进行了尝试。
我遵循了各种指南,并且 Stackoverflow 回答了所有与在 Asp.Net Core 应用程序本身中配置 Windows 身份验证相关的问题。结果要么没有变化,要么连续出现登录提示,从不接受有效的用户名和密码。看来这些解决方案可能是针对旧版本的框架或开发人员尝试组合多种身份验证方法的场景编写的。