我想配置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?}");
});
}
}
答案 0 :(得分:3)
在program.cs
中的Web主机配置期间配置了Windows Authvar 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作为调试目标来运行该应用程序。