asp.net 5中的Windows身份验证

时间:2015-02-16 13:08:44

标签: c# windows-authentication asp.net-core asp.net-core-mvc

我正在ASP .NET 5,MVC 6中构建一个Intranet应用程序。我想知道如何启用Windows身份验证。默认项目模板仅支持单个用户帐户。

9 个答案:

答案 0 :(得分:7)

Mark的回答在ASP.Net RC1中仍然有效。还有一些额外的步骤将它们联系在一起(我没有足够的声誉来评论他的解决方案):

  1. 安装WebListener from NuGet
  2. 将以下用法添加到Startcup.cs:

    using Microsoft.AspNet.Http.Features;
    using Microsoft.Net.Http.Server;
    
  3. 在app.UseMvc:

    之前的Configure方法中添加Mark's code snippet
    // If we're self-hosting, enable integrated authentication (if we're using
    // IIS, this will be done at the IIS configuration level).
    var listener = app.ServerFeatures.Get<WebListener>();
    if (listener != null)
    {
        listener.AuthenticationManager.AuthenticationSchemes = 
        AuthenticationSchemes.NTLM;
    }
    
  4. 要对此进行调试,您需要project.json中的add the WebListener run target,正如Mark在其他答案中所述:

    "commands": {
      "weblistener": "Microsoft.AspNet.Server.WebListener --config hosting.ini",
      "web": "Microsoft.AspNet.Server.Kestrel"
    },
    
  5. 选择weblistener而不是Web(Kestrel)的IIS Express来调试您的应用程序。

答案 1 :(得分:5)

除了此处仅针对IIS托管的其他答案之外,您还可以在自托管的ASP.NET 5项目中启用Windows身份验证(针对测试版7和测试版8进行测试),方法是在启动时添加以下内容: .cs Configure方法,在您希望保护的app.UseMvc或类似之前:

BETA 8更新

// If we're self-hosting, enable integrated authentication (if we're using
// IIS, this will be done at the IIS configuration level).
var listener = app.ServerFeatures.Get<WebListener>();
if (listener != null)
{
    listener.AuthenticationManager.AuthenticationSchemes = 
        AuthenticationSchemes.NTLM;
}

以前对BETA 7的回答

// If we're self-hosting, enable windows/integrated authentication.
// For IIS, this needs to be configured in IIS instead, and the
// following will have no effect.
if ((app.Server as ServerInformation) != null)
{
  var serverInformation = (ServerInformation)app.Server;
  serverInformation.Listener.AuthenticationManager.AuthenticationSchemes = 
      AuthenticationSchemes.NTLM;
}

改编自官方MusicStore example

如果您正在使用带有IIS Express的Visual Studio 2015进行调试,则可以通过现在项目的调试属性页面中的复选框打开Windows身份验证,而不是弄乱applicationhost.config文件。我无法使web.config解决方案适用于IIS Express调试,它会抛出有关配置在该级别无效的错误。 请注意,此版本目前无法在测试版8中使用 - 请参阅this issue

答案 2 :(得分:5)

$(ProjectDir)\Properties\launchSettings.json文件将在为IISExpress进行适当调试时触发Visual Studio生成web.config文件,该文件将根据启动设置设置<authentication/>节点。

以下是launchSettings.json

的示例
{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
      "applicationUrl": "http://localhost:65070/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "Hosting:Environment": "Development"
      }
    },
    "web": {
      "commandName": "web",
      "environmentVariables": {
        "Hosting:Environment": "Development"
      }
    }
  }
}

但是也使用扩展名app.UseIISPlatformHandler();而不是操纵侦听器。该扩展将设置一个中间件,它将自动请求NTLM并从IIS转换适当的句柄。

部署到IIS时,如果您正在使用WebListener,则必须自己将authentication节点添加到web.config。如果您正在使用HttpPlatformHandler(我个人推荐)并代理到kestrel,请将forwardWindowsAuthToken="true"添加到httpPlatform中的web.config节点。

答案 3 :(得分:4)

使用IIS托管,您可以使用适用于您的应用程序的IIS配置将web.config文件添加到wwwroot目录。

的web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
  </system.webServer>
</configuration>

答案 4 :(得分:1)

我做了我在互联网上发现的一切,没有人工作过。所以,我查看了aspnet 4.5配置文件,我看到它使用:

<IISExpressAnonymousAuthentication>disabled</IISExpressAnonymousAuthentication>
<IISExpressWindowsAuthentication>enabled</IISExpressWindowsAuthentication>

在.csproj文件上,我刚刚复制到aspnet 5的.xproj文件中并且有效。

答案 5 :(得分:1)

由于您正在构建新应用程序,因此可以通过单击Change Authentication来更改身份验证类型。这将显示一个选项,您可以在其中将类型类型更改为Windows身份验证。

enter image description here enter image description here

答案 6 :(得分:1)

对于RC1&amp;来自空Web应用程序的IISExpress:

  • 右键单击Web项目,选择Properties
  • 点击Debug标签,然后点击Enable Windows Authentication

这影响~/Properties/launchSettings.json如下:

"windowsAuthentication": true,
"anonymousAuthentication": false,

答案 7 :(得分:1)

如果要在当前Web项目上启用Windows身份验证:

在解决方案资源管理器上,右键点击网站并选择&#34;属性窗口&#34;

设置&#34;匿名身份验证&#34;到&#34;禁用&#34;

并设置&#34; Windows身份验证&#34;

运行项目,一切都会好的。

答案 8 :(得分:0)

您需要手动配置IIS Express(在VS2015 CTP6中)。 为此,请编辑applicationhost.config文件。 (C:\ Users \ your username \ Documents \ IISExpress \ config \ applicationhost.config)

在配置标签中添加:

<location path="{your site name}">
    <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>