gpt4 book ai didi

c# - .ASP.NET Core 仅在 Controller 上存在策略时运行策略处理程序

转载 作者:行者123 更新时间:2023-11-30 17:25:14 25 4
gpt4 key购买 nike

我正在创建一个自定义授权策略处理程序来保护我的一些路由。我在我的大部分 Controller 上使用 [Authorize] 过滤器,但是,我希望其中的一些 使用 [Authorize(Policy="IsVerified") ] 以便它仅在 IsVerified 声明存在时才允许访问。

我的问题是我已经创建了我的处理程序,但它正在每个具有 [Authorize] 过滤器的路由上运行,而不仅仅是那些具有 [Authorize(Policy ="IsVerified"]。是否可以只在该策略存在的地方运行处理程序?

这是我的自定义处理程序:

public class UserVerifiedHandler : AuthorizationHandler<UserVerifiedRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, UserVerifiedRequirement requirement)
{
bool isVerified = Convert.ToBoolean(context.User.FindFirst("UserIsVerified").Value);

if (isVerified)
{
context.Succeed(requirement);
}
else
{
context.Fail();
}

return Task.CompletedTask;
}
}

这是我在我的 Startup.cs 中注册它的方式

services.AddSingleton<IAuthorizationHandler, UserVerifiedHandler>();

services.AddAuthorization(options =>
{
options.AddPolicy("UserIsVerified",
policy => policy.Requirements.Add(new UserVerifiedRequirement(true)));
});

示例用法

[Authorize(Policy="UserIsVerified")
public IActionResult RouteToOnlyAllowAuthorizedAndVerified() {
//Access here only if claim is true
}

[Authorize]
public IActionResult RouteToAllowAuthorized() {
//Access here regardless if claim true or false
}

最佳答案

这是我的错误,误报。它按预期工作,我只是在后台调用了一个 Controller 方法,该方法已经附加了策略(之前出于测试目的添加但忘记删除)。所以它被调用并使处理程序看起来像是在不应该执行的时候执行了。

关于c# - .ASP.NET Core 仅在 Controller 上存在策略时运行策略处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942136/

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