剃刀页面上基于策略的授权

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

我尝试在Core 2.1上的剃刀页面中设置基于策略的授权。

我已经设置了策略并使用authorize属性修饰了剃刀页面。我无法弄清楚我做错了什么或者是否需要做其他事情,但是我无法让页面进行授权。它总是给我

找不到网址的网页:

本地主机/ ADENETCore /帐号/存取遭拒?RETURNURL =%2FADENETCore%2FContact

你能指点我正确的方向吗?

ConfigureServices:

services.AddAuthorization(options =>
                {
                    options.AddPolicy("AtLeast21", policy =>
                        policy.Requirements.Add(new MinimumAgeRequirement(21)));
                });
            services.AddMvc().AddRazorPagesOptions(options =>
                    {
                        options.Conventions.AuthorizePage("/Contact", "AtLeast21"); // with policy
                    })
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddSessionStateTempDataProvider();

配置:

    app.UseAuthentication();
    app.UseMvc();

政策要求:

    public class MinimumAgeRequirement : IAuthorizationRequirement
    {
     public int MinimumAge { get; private set; }

     public MinimumAgeRequirement(int minimumAge)
     {
      MinimumAge = minimumAge;
     }
    }

政策处理程序:

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

    }
}

剃刀页面:

[Authorize(Policy = "AtLeast21")]
public class ContactModel : PageModel  

它正在重定向到Account/AccessDenied页面

.net-core
1个回答
0
投票

您需要将授权处理程序添加为单例。

services.AddSingleton<IAuthorizationHandler, MinimumAgeHandler>();

有关更多信息,请查看:https://docs.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased?view=aspnetcore-2.2

© www.soinside.com 2019 - 2024. All rights reserved.