无法为 Area Razor 页面添加授权约定
Can't Add Authorization Convention for Area Razor Page
我使用 .net Core 3.1 按照官方文档 (Scaffold Identity in ASP.NET Core projects) 中的说明将 Identity 搭建到我的空 Web 项目中。
我正在使用基于声明的授权。在我的 Startup.cs 文件中,我创建了以下策略:
services.AddAuthorization(options =>
{
options.AddPolicy("Admin", policy =>
{
policy.RequireClaim("CanListUsers", true.ToString());
policy.RequireClaim("CanEditUsers", true.ToString());
});
});
紧接着我将关闭某些区域页面,如下:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Register", "Admin");
options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
});
我只想关闭“管理员”用户的注册。我想只允许登录用户管理帐户。
我无法打开注册页面。我仍然可以在没有登录用户的情况下访问它。为什么不呢?
另一方面,奇怪的是,如果我删除授权约定 /Account/Manage
,该页面会将匿名用户重定向到登录。这是怎么回事?
我想我已经解决了这两个问题。
我无法打开注册页面。我仍然可以在没有 logged-in 用户的情况下访问它。为什么不呢?
页面装饰有[AllowAnonymous]
。显然,装饰器的优先级高于配置时设置的 约定。
另一方面,奇怪的是,如果我删除授权约定 /Account/Manage
,该页面会将匿名用户重定向到 Login
。这是怎么回事?
我注意到非logged-in 用户应该可以访问的所有页面都装饰有[AllowAnonymous]
。我在想作为身份模板的脚手架假设实施者最终会添加
app.UseAuthentication();
app.UseAuthorization();
我的想法是,这些中间件会自动限制所有页面,本质上是在所有页面上绑定一个 [Authorize]
属性,以便可以允许非 logged-in 用户的页面需要 opt-out 与 [AllowAnonymous]
.
这些只是有根据的猜测,所以请随时在评论中纠正我
我使用 .net Core 3.1 按照官方文档 (Scaffold Identity in ASP.NET Core projects) 中的说明将 Identity 搭建到我的空 Web 项目中。
我正在使用基于声明的授权。在我的 Startup.cs 文件中,我创建了以下策略:
services.AddAuthorization(options =>
{
options.AddPolicy("Admin", policy =>
{
policy.RequireClaim("CanListUsers", true.ToString());
policy.RequireClaim("CanEditUsers", true.ToString());
});
});
紧接着我将关闭某些区域页面,如下:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Register", "Admin");
options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
});
我只想关闭“管理员”用户的注册。我想只允许登录用户管理帐户。
我无法打开注册页面。我仍然可以在没有登录用户的情况下访问它。为什么不呢?
另一方面,奇怪的是,如果我删除授权约定 /Account/Manage
,该页面会将匿名用户重定向到登录。这是怎么回事?
我想我已经解决了这两个问题。
我无法打开注册页面。我仍然可以在没有 logged-in 用户的情况下访问它。为什么不呢?
页面装饰有[AllowAnonymous]
。显然,装饰器的优先级高于配置时设置的 约定。
另一方面,奇怪的是,如果我删除授权约定 /Account/Manage
,该页面会将匿名用户重定向到 Login
。这是怎么回事?
我注意到非logged-in 用户应该可以访问的所有页面都装饰有[AllowAnonymous]
。我在想作为身份模板的脚手架假设实施者最终会添加
app.UseAuthentication();
app.UseAuthorization();
我的想法是,这些中间件会自动限制所有页面,本质上是在所有页面上绑定一个 [Authorize]
属性,以便可以允许非 logged-in 用户的页面需要 opt-out 与 [AllowAnonymous]
.
这些只是有根据的猜测,所以请随时在评论中纠正我