如何允许特定区域的授权方案

How to allow authorization scheme in specfic areas

我默认使用cookie认证方案。 我有一个特定的区域,我想允许一个额外的身份验证方案,否则,所有现有的政策都应该保持不变。

我尝试将 AuthoriztionFilter 添加到 IPageHandlerModelConvention/IControllerModelConvention:

public class AreaFiltersConvention : IPageHandlerModelConvention
{
    public string[] Areas { get; set; }


    public void Apply(PageHandlerModel model)
    {
        if (this.Areas.Contains(model.Page.AreaName))
        {
            model.Page.Filters.Add(new AuthorizeFilter("AllowBasicAuthPolicy"));
        }
    }

我有两个问题:

  1. PageHandlerModel.Page 为空,所以无法添加 AuthorizeFilter。

  2. 据我所知,我只能在需要特定策略时使用它。我在 OR 条件下挣扎。

     services.AddAuthorization(options =>
     {
          options.AddPolicy("AllowBasicAuthPolicy", policy =>
          {
               policy.AddAuthenticationSchemes("Basic"); // this breaks existing policies
               policy.RequireAuthenticatedUser();
          });
     });
    

您可以在 razor 页面中使用内置 AuthorizeAreaPage 约定,如下所示:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizeAreaPage("AreaName", "/PageName", "AllowBasicAuthPolicy");
});

参考:

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/razor-pages-authorization?view=aspnetcore-5.0#require-authorization-to-access-an-area-page