如何在 ASP.NET Core 2.0 中的每个页面请求中将用户路由到登录页面

How to route the user to the login page on every page request in ASP.NET Core 2.0

我进行了大量谷歌搜索以找出在 ASP.NET Core 2.0 中执行此操作的最佳方法,但没有得出任何明确的结论。在 ASP.NET / MVC 的早期版本中,我可以通过检查用户的会话是否已通过身份验证将用户路由到登录页面。

我正在寻找 ASP.NET Core 2.0 中的类似内容。我想检查用户是否在每个页面请求上都经过身份验证,如果没有将他们路由到登录页面。

如何在 ASP.NET Core 2 中实现这一点?

ASP.NET 身份将为您完成这项工作。您只需定义哪些 files/folders 受保护,哪些 public。您可以在 startup.cs 文件的 ConfigureServices 方法中定义它。

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizeFolder("/AuthorizedFolder");
        options.Conventions.AuthorizePage("/AuthorizedPage");
        options.Conventions.AllowAnonymousToFolder("/AuthorizedFolder/AllowFolder");
        options.Conventions.AllowAnonymousToPage("/AuthorizedFolder/AllowPage");
    });

为了让您更容易理解它的工作原理,我添加了 4 个约定。第一个约定说 AuthorizedFolder 文件夹中的所有页面都将受到保护,您必须登录才能查看其内容,否则您将被重定向到登录页面。

第二个公约说 AuthorizedPage 页面是受保护的,这意味着只有登录的用户才能查看该页面的内容。

第三个约定在受保护的文件夹中定义一个 public 文件夹。

第四个约定在受保护的文件夹中定义了一个 public razor 页面。

控制器

对于控制器,您可以使用 Authorize 和 AllowAnonymous 属性。下面的例子演示了如何保护控制器的所有动作:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication3.Controllers
{
    [Authorize]
    public class TestController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
}

下面的例子演示了如何保护一个动作:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication3.Controllers
{
    public class TestController : Controller
    {
        [Authorize]
        public IActionResult Index()
        {
            return View();
        }
    }
}

最后你可以看到如何保护控制器,但是 public 受保护控制器的一个动作:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication3.Controllers
{
    [Authorize]
    public class TestController : Controller
    {
        [AllowAnonymous]
        public IActionResult Index()
        {
            return View();
        }
    }
}

希望对您有所帮助。

任何正在寻找一种简单方法来授权所有页面的人都可以这样做。

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