如何配置ASP.NET Core应用程序以使用Windows身份验证?

时间:2016-10-12 21:52:52

标签: asp.net-core .net-core coreclr

我想配置ASP.NET应用程序使用不同的身份验证取决于环境。因此,对于开发环境,我想使用Windows身份验证,而对于我想要使用Facebook身份验证的所有其他环境。

我已经为非开发环境配置了Facebook身份验证。如何为开发环境配置Windows身份验证? Windows身份验证仅在开发期间使用,因此开发人员无需在每次在VS中运行应用程序时进行登录。我们有多个开发人员,这意味着Windows身份将根据执行者的不同而不同。创建Windows标识后,我将向Windows标识添加声明。

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        // some stuff here for building configuration
    }

    public IConfigurationRoot Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthorization();
        services.AddMvc(config =>
        {
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()              
                .Build();
            config.Filters.Add(new AuthorizeFilter(policy));
        });
    }        

   public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime)
   {            
        if(env.IsDevelopment())
        {
            // How do i use windows authentication here
        }
        else
        {
                            // this is my custom extension method
            app.UseFacebookAuthentication();
        }

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });            
    }
}

2 个答案:

答案 0 :(得分:3)

在program.cs

中的Web主机配置期间配置了Windows Auth
var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>()
    .Build();

具体来说,它是UseIISIntegration()行。

既然它自己什么都不做,它还需要在aspNetCore节点中的web.config中进行配置;

<aspNetCore 
    processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 
    stdoutLogEnabled="false" 
    stdoutLogFile=".\logs\stdout" 
    forwardWindowsAuthToken="true" />

需要设置forwardWindowsAuthToken值。

所以不,你不能在env.IsDevelopment()检查中这样做。

答案 1 :(得分:1)

如果您使用IIS Express进行开发环境,则可以通过快速方式设置Windows身份验证。 Properties文件夹中有launchSettings.json,您可以轻松修改它以使用Windows身份验证进行开发,而无需修改类Startup。

在此文件中,您可以更改&#34; windowsAuthentication&#34;真实的,和#34; anonymousAuthentication&#34;为假。

以下是示例launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
      "applicationUrl": "http://localhost:6366/",
      "sslPort": 0
    }
  },
  profiles": {
   "IIS Express": {...
}

完成此修改后,您可以通过选择IIS Express作为调试目标来运行该应用程序。