在.NET Core中调用AuthorizationHandler

问题描述 投票:0回答:1

在 ASP.NET Core 6 Web API 中,我尝试调用

AuthorizationHandler
函数。我想创建一个授权机制,首先使用 [Authorize] 标签对来自 AWS cognito 的用户进行身份验证 - 这部分正在工作。

之后,我想要自己的自定义授权机制。

我的问题是

AuthorizationHandler
函数没有被调用。

这是我的代码中的部分:

程序.cs

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("ScreenAuthorizationPolicy", policy =>
    {
        policy.Requirements.Add(new ScreenAuthorizationRequirement());
    });
});
builder.Services.AddSingleton<IAuthorizationHandler, ScreenAuthorizationHandler>();
.
.
app.UseAuthentication();
app.UseAuthorization();


app.MapControllers();
app.UseCors("*");
app.Run();

AuthorizationAttribute.cs

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)]
    public class ScreenAuthorizationAttribute : Attribute
    {
        public Screens ScreenID { get; }
        public PermissionLevel PermissionLevel { get; }

        public ScreenAuthorizationAttribute(Screens screenID, PermissionLevel permissionLevel)
        {
            ScreenID = screenID;
            PermissionLevel = permissionLevel;
        }
    }

ScreenAuthorizationRequirement.cs

public class ScreenAuthorizationRequirement : IAuthorizationRequirement
    {
    }

ScreenAuthorizationHandler.cs

public class ScreenAuthorizationHandler : AuthorizationHandler<ScreenAuthorizationRequirement>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        ScreenAuthorizationRequirement requirement)
    {
        context.Succeed(requirement);
        return Task.CompletedTask;
    }
}

这是我需要进入的功能。

在我的控制器中我正在写

 [Route("api/[controller]/Endpoint")]
 [Authorize]
 [ScreenAuthorization(Screens.screen1, PermissionLevel.Read)]
 public async Task<IActionResult> GetSomething()

感谢您的帮助

asp.net-core authorization webapi
1个回答
0
投票

您可能会混淆两种授权策略的用法。

第一个: 策略授权

使用需求、需求处理程序和预配置的策略。

使用带有策略名称的

[Authorize]
属性将策略应用到控制器。例如:

[Authorize(Policy = "AtLeast21")]
public class AtLeast21Controller : Controller
{
    public IActionResult Index() => View();
}

第二个: 自定义授权属性

派生自 AuthorizeAttribute,并使用自定义 IAuthorizationPolicyProvider 来控制如何提供授权策略。

您可以像其他授权属性一样将其应用于操作。例如:

[MinimumAgeAuthorize(10)]
public IActionResult RequiresMinimumAge10()
© www.soinside.com 2019 - 2024. All rights reserved.