如何允许特定区域的授权方案
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"));
}
}
我有两个问题:
PageHandlerModel.Page
为空,所以无法添加 AuthorizeFilter。
据我所知,我只能在需要特定策略时使用它。我在 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");
});
参考:
我默认使用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"));
}
}
我有两个问题:
PageHandlerModel.Page
为空,所以无法添加 AuthorizeFilter。据我所知,我只能在需要特定策略时使用它。我在 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");
});
参考: