【问题标题】:Can't Add Authorization Convention for Area Razor Page无法为区域剃刀页面添加授权约定
【发布时间】:2021-01-30 22:32:42
【问题描述】:

使用 .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,页面会将匿名用户重定向到登录。这是怎么回事?

【问题讨论】:

    标签: c# asp.net-core .net-core asp.net-identity razor-pages


    【解决方案1】:

    我想我已经解决了这两个问题。

    我无法进入注册页面。我仍然可以在没有登录用户的情况下访问它。为什么不呢?

    页面以[AllowAnonymous] 装饰。 ? 显然装饰器的优先级高于配置时设置的约定

    另一方面,奇怪的是,如果我删除授权约定/Account/Manage,页面会将匿名用户重定向到Login。这是怎么回事?

    我注意到所有应该由未登录用户访问的页面都用[AllowAnonymous] 装饰。我认为作为身份模板的脚手架假定实施者最终会添加

    app.UseAuthentication();
    app.UseAuthorization();
    

    我的想法是这些中间件会自动关闭所有页面,本质上是在所有页面上绑定[Authorize] 属性,以便允许未登录用户的页面需要使用[AllowAnonymous] 选择退出。


    这些只是有根据的猜测,所以请随时在 cmets 中纠正我?

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 1970-01-01
      • 2020-11-02
      • 2020-03-29
      • 2019-09-16
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      相关资源
      最近更新 更多