我的控制器受Authorize属性保护。我想要做的是告诉Authorize属性使用Windows模式或根本没有模式。我怎么做到这一点?
[Authorize(AuthenticationSchemes = AuthSchemes)]
我想在运行时更改架构,因此管理员可以基本上更改身份验证设置。
答案 0 :(得分:0)
经过很长一段时间的计算,我已经设法让这个工作,但不是那么优雅。
我决定不使用Authorize属性,而是决定进行自定义身份验证过程。所以基本上我使用自定义身份验证过程将身份验证中间件迁移到ASP.NET CORE 2.0,遵循此资源Migrating authentication middleware to ASP.NET CORE 2.0.
通过这个设置,我创建了一个简单的类,它将在从.json文件中读取时使用:
public class AuthenticationSettings
{
public string AuthenticatonScheme { get; set; }
public bool Enabled { get; set; }
}
我还制作了一个.json文件,其中包含我们的应用程序应该使用Windows身份验证的天气信息。读取文件发生在ConfigureServices()方法的Startup类中。如果windows设置为true,我们创建自定义策略(我们的方案现已设置),然后全局应用:
services.AddAuthorization(o => // we create policy with our custom sheme
{
o.AddPolicy("WinPolicy", b =>
{
b.RequireAuthenticatedUser();
b.AuthenticationSchemes = new List<string> { auth_settings.AuthenticatonScheme }; // here we set the windows scheme
});
});
services.AddMvc(o =>
{
o.Conventions.Add(new AddAuthorizeFiltersControllerConvention()); // we apply the policy
});