gpt4 book ai didi

authentication - 一次使用多个方案授权 ASP.NET Core 2.1 Controller

转载 作者:行者123 更新时间:2023-12-04 17:45:17 24 4
gpt4 key购买 nike

让我们假设我们正在使用“Abc”架构和相应处理程序的身份验证,一切都很好。我们能够简单地使用

来保护 Controller

[Authorize(AuthenticationSchemes = "Abc", Roles = "admin")] 属性

但现在似乎也需要能够使用“Xyz”架构来保护 Controller 的端点(因此请求应符合两种方案的要求)。所以,我认为注册新的模式和处理程序足以能够按如下方式使用 [Authorize] 并接收 AND 逻辑:

[Authorize(AuthenticationSchemes = "Abc", Roles = "admin")]
[Authorize(AuthenticationSchemes = "Xyz")]
public class UserController : ControllerBase
{
}

但是,对 Controller 的有效请求会导致“禁止” 响应状态(请注意,即使是“未授权”)。

我还发现有趣的是,当我们在操作方法而不是 Controller 上应用 [Authorize(AuthenticationSchemes = "Xyz")] - 一切都按预期工作。

附注:Startup 中的 MvcOptions.AllowCombiningAuthorizeFilters 已设置为 false

我猜测当两个属性出现在同一级别(在本例中为 Controller )时,它仍然以某种方式合并授权逻辑。

有人知道我错过了什么吗?可能我的想法完全错误,并且有一种适当的方法来进行多模式身份验证因此,请随时提供您的想法。

最佳答案

我想这可能已经得到了 here 的回答。

当您看到这种情况下的复杂授权属性时,基于策略的授权可以帮助保持事情的可维护性和简单性。

你最终会使用策略是这样的

services.AddAuthorization(options =>
{
options.AddPolicy("MyPolicy", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireRole("Admin");
policy.AddAuthenticationSchemes("Abc", "Xyz");
});
});

并且您只需装饰您的 Controller 或其任何方法

[Authorize(Policy = "MyPolicy")]

同时查看 official docs 以了解它是如何完成的以及它可以为您提供什么。

关于authentication - 一次使用多个方案授权 ASP.NET Core 2.1 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52423750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com