Authentication 同时使用多个方案授权ASP.NET Core 2.1控制器
假设我们正在使用“Abc”模式和相应的处理程序进行身份验证,一切都很好。我们可以简单地使用Authentication 同时使用多个方案授权ASP.NET Core 2.1控制器,authentication,asp.net-core-2.1,authorize-attribute,multiple-schema,Authentication,Asp.net Core 2.1,Authorize Attribute,Multiple Schema,假设我们正在使用“Abc”模式和相应的处理程序进行身份验证,一切都很好。我们可以简单地使用 [授权(AuthenticationSchemes=“Abc”,Roles=“admin”)]属性 但现在似乎还需要能够使用“Xyz”模式保护控制器的端点(因此请求应该对应于两种方案的需求)。 因此,我认为注册新的模式和处理程序就足以使用[Authorize]如下并接收和逻辑: [Authorize(AuthenticationSchemes = "Abc", Roles = "admin")] [Aut
[授权(AuthenticationSchemes=“Abc”,Roles=“admin”)]
属性
但现在似乎还需要能够使用“Xyz”模式保护控制器的端点(因此请求应该对应于两种方案的需求)。
因此,我认为注册新的模式和处理程序就足以使用[Authorize]
如下并接收和逻辑:
[Authorize(AuthenticationSchemes = "Abc", Roles = "admin")]
[Authorize(AuthenticationSchemes = "Xyz")]
public class UserController : ControllerBase
{
}
但是,对控制器的有效请求会导致“禁止”响应状态(请注意,即使在“未授权”状态下也不会)
此外,我还发现有趣的是,当我们在action方法而不是controller上应用[Authorize(AuthenticationSchemes=“Xyz”)]
时,一切都会按预期运行
注意:mvcopions.AllowCombiningAuthorizeFilters
在Startup
中已设置为false
我猜想,当两个属性都在同一级别(在本例中为控制器)时,它仍然以某种方式合并了授权逻辑
有人知道我错过了什么吗?
可能我的想法是错误的,有一种合适的方法来进行多模式身份验证
所以,请随时提供您的想法。我想这可能已经得到了回答
当您看到像在本例中这样的复杂授权属性时,基于策略的授权可以帮助保持事物的可维护性和简单性
最终使用策略的结果是
services.AddAuthorization(options =>
{
options.AddPolicy("MyPolicy", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireRole("Admin");
policy.AddAuthenticationSchemes("Abc", "Xyz");
});
});
你可以用你的控制器或者它的任何方法来装饰你的控制器
[Authorize(Policy = "MyPolicy")]
也可以查看一下,了解它是如何完成的,以及它可以为您提供什么