如何在ASP.NET Core Razor Pages中拒绝匿名用户?

6

我可以帮助您翻译如何在asp.net core中拒绝匿名用户访问除登录页面之外的任何razor页面。

我尝试过以下方法:

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

8
对于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

3

在控制器中添加属性

[Authorize]
public class HomeController : Controller 

然后在端点中,您希望匿名访问。

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

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

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

然后继承它。
public class HomeController : BaseController

或者按照此文档中列出的内容

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

这里也有一个关于GlobalFilters的讨论

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

这个问题涉及到 Razor Pages,我想在一个地方完成它,而不是为每个页面都做一遍。 - mko
@mko 添加了带有文档的 AddRazorPagesOptions - Gabriel Llorico
@mko 从 https://dev59.com/TGEh5IYBdhLWcg3wRRuh#22597699 添加了 GlobalFilters,但必须在登录页面上添加 [AllowAnonymous] - Gabriel Llorico
1
大多数建议在 Razor Pages 中不起作用。没有控制器。您无法在操作方法上放置“Authorize”属性,而在 Razor Pages 中,过滤器的应用方式也不同。 - Mike Brind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接