IIS中的Asp.Net核心MVC应用程序Windows身份验证

时间:2016-08-22 16:03:42

标签: iis asp.net-core windows-authentication

我的Asp.Net Core mvc Web应用程序需要Windows身份验证。在开发中,在IIS Express上,由于这个设置,一切正常。

launchSettings.json

 "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
      "applicationUrl": "http://localhost:61545/",
      "sslPort": 0
    }
  }

部署到IIS时,我得到一个空白页面。对我的网站的请求获得500错误代码。

我尝试将此配置添加到Startup.cs,如here所述,但没有成功。

    services.Configure<IISOptions>(options => {
        options.ForwardWindowsAuthentication = true;
    });

当我直接在IIS中查看身份验证参数时,会激活Windows身份验证。

我发现一些帖子谈论了一个名为Microsoft.AspNetCore.Server.WebListener的软件包,其他一些关于实现自定义中间件的软件包。我无法想象这个基本功能需要付出那么多努力。我错过了什么吗?

3 个答案:

答案 0 :(得分:14)

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>

答案 1 :(得分:0)

对我来说,我必须添加一行

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

答案 2 :(得分:-1)

您需要检查项目目录中的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>