【问题标题】:How to deny anonymous users in asp.net core razor pages?如何在 asp.net core razor 页面中拒绝匿名用户?
【发布时间】:2019-12-28 10:40:06
【问题描述】:

如何拒绝匿名用户访问除登录页面之外的 asp.net core 中的任何剃须刀页面?

我试过了

    services.AddMvc()
        .AddRazorPagesOptions(options =>
        {
            options.RootDirectory = "/";
            options.Conventions.AllowAnonymousToPage("/Account/Login");
            options.Conventions.AuthorizeFolder("/");
        })
        .SetCompatibilityVersion(CompatibilityVersion.Latest);

【问题讨论】:

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


    【解决方案1】:

    对于 Razor Pages 2.x 应用程序,您只需将以下内容添加到您的 Configure 方法中,以防止未经授权的用户访问 Pages 文件夹或子文件夹中的任何页面:

    services.AddMvc().AddRazorPagesOptions(options => {
        options.Conventions.AuthorizeFolder("/");
    });
    

    如果您使用的是 .NET Core 3,以下内容将执行相同的操作:

    services.AddRazorPages(options => {
        options.Conventions.AuthorizeFolder("/");
    });
    

    未经授权的用户将被重定向到默认登录页面,即Identity/Account/Login

    【讨论】:

      【解决方案2】:

      在控制器中添加属性

      [Authorize]
      public class HomeController : Controller 
      

      然后在您想匿名访问的端点中

      [AllowAnonymous] 
      public ViewResult Index() 
      { 
            return View(); 
      }  
      

      或者你可以创建一个基本控制器类

      [Authorize]
      public class BaseController : Controller 
      {
          ...
      }
      

      然后继承它

      public class HomeController : BaseController
      

      or as listed in this documentation

      //sample code
      services.AddMvc()
          .AddRazorPagesOptions(options =>
          {
              options.Conventions.AuthorizePage("/Contact");
              options.Conventions.AuthorizeFolder("/Private");
              options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
              options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
          })
      

      also here, GlobalFilters

      //listed answer
      GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
      

      【讨论】:

      • 问题是关于剃须刀页面的,我想在一个地方做,而不是每个页面
      • @mko 在文档中添加了addrazorpagesoptions
      • @mko 从stackoverflow.com/a/22597699/2122217 添加了GlobalFilters,但必须将[AllowAnonymous] 放在登录页面中
      • 大部分建议在 Razor Pages 中不起作用。没有控制器。您不能将 Authorize 属性放在操作方法上,并且过滤器在 Razor 页面中以不同的方式应用。
      猜你喜欢
      • 2021-01-15
      • 2012-04-06
      • 1970-01-01
      • 2021-07-06
      • 2019-12-15
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多