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

标签 c# asp.net .net asp.net-core

我正在创建一个自定义授权策略处理程序来保护我的一些路由。我在我的大部分 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/

相关文章:

c# - 捕获属性的目标

c# - 发生未处理的异常后如何重新启动 Windows 服务

asp.net - ASP.NET session 状态/NInject/OnePerRequest 行为的问题

c# - 系统.Management.ManagementException : Not found

.net - 为什么 IPAddress.MapToIPv4() 会抛出 ArgumentOutOfRangeException?

c# - ASMX Web 服务方法单例

c# - 在 .NET 中初始化空变量

c# - 使用 Repeater 控件将 ID 传递给 OnClick 事件?

c# - 我如何在 ASP.NET 中为我的 ListView 控件获取滚动条

c# - 我们如何在C#中将access数据库(.mdb)导入到sql server 2008中