IIS 中的 Asp.Net 核心 MVC 应用程序 Windows 身份验证
Posted
技术标签:
【中文标题】IIS 中的 Asp.Net 核心 MVC 应用程序 Windows 身份验证【英文标题】:Asp.Net core MVC application Windows Authentication in IIS 【发布时间】:2016-08-22 16:03:41 【问题描述】:我的 Asp.Net Core mvc web 应用程序需要 Windows 身份验证。在开发中,在 IIS Express 上,由于此设置,一切正常
launchSettings.json
"iisSettings":
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress":
"applicationUrl": "http://localhost:61545/",
"sslPort": 0
部署到 IIS 时,我得到一个空白页。对我的站点的请求收到 500 错误代码。
按照here 的说明,我尝试将此配置添加到 Startup.cs,但没有成功。
services.Configure<IISOptions>(options =>
options.ForwardWindowsAuthentication = true;
);
当我直接在 IIS 中查看身份验证参数时,Windows 身份验证被激活。
我发现一些帖子讨论了一个名为 Microsoft.AspNetCore.Server.WebListener
的包,还有一些帖子讨论了实现自定义中间件。我无法想象这个基本功能需要付出那么多努力才能工作。我错过了什么吗?
【问题讨论】:
您确定错误是因为身份验证而发生的吗?如果是这样,错误信息是什么? 您的 FREB 日志中有什么内容? iis.net/learn/troubleshoot/using-failed-request-tracing/… 您可以尝试在 IIS 管理器中摆弄应用程序池标识:iis.net/learn/manage/configuring-security/… 【参考方案1】:launchSettings.json
文件仅供 VS 使用。当您发布您的应用程序(或在没有 VS 的情况下运行)时,launchSettings.json
未被使用。当您使用 IIS/IISExpress 运行时,您只需要确保您的 web.config 具有正确的设置。在您的情况下,web.config 中的forwardWindowsAuthToken
属性丢失或设置为false
。必须将其设置为 true
才能使 Windows 身份验证正常工作。发布前的示例 web.config 如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true"/>
</system.webServer>
</configuration>
【讨论】:
这很有帮助,感谢您提供的信息。如果 web.config 文件不存在,您可能需要手动创建它,这在我使用 VS 2017 时发生,如下所述:https://developercommunity.visualstudio.com/content/problem/26751/publish-aspnet-core-to-iis-with-windows-authentica.html【参考方案2】:对我来说,我必须添加一行
services.AddAuthentication(IISDefaults.AuthenticationScheme);
在方法ConfigureServices
中Startup.cs
我的应用允许 Windows 和匿名用户。
https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x#windows-authentication-httpsys--iisintegration
【讨论】:
【参考方案3】:您需要检查项目目录中的 web.config。这个设置对我有帮助。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true"/>
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
</configuration>
【讨论】:
这是 asp.net core 2.1 中的无效配置以上是关于IIS 中的 Asp.Net 核心 MVC 应用程序 Windows 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC + IIS7 + FireFox:URL 中的斜杠
更改 ASP.NET MVC 或 IIS 中的 URL 根路径