【问题标题】:Policy based authorization on razor pages剃须刀页面上基于策略的授权
【发布时间】:2019-06-25 12:31:31
【问题描述】:

我尝试在 Core2.1 的 razor 页面上设置基于策略的授权。

我已设置策略并使用授权属性装饰剃须刀页面。我不知道我做错了什么或者是否需要做其他事情,但我无法获得授权页面。它总是给我

没有找到该网址的网页:

localhost/ADENETCore/Account/AccessDenied?ReturnUrl=%2FADENETCore%2FContact

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

配置服务:

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 页面

【问题讨论】:

  • 您的预期行为是什么?它应该重定向到授权失败的这个位置。
  • @NevilleNazerane 可能是我遗漏了一些东西,但我希望它授权联系页面,因为我已经通过了处理程序类中的要求(context.Succeed(requirement);return Task.CompletedTask;)

标签: .net-core


【解决方案1】:

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

services.AddSingleton<IAuthorizationHandler, MinimumAgeHandler>();

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

【讨论】:

  • 我记得不久前浏览过这个文档。添加这个单例是关键。其余大部分不是强制性的。
猜你喜欢
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
相关资源
最近更新 更多