ASP.NET核心身份中的两个身份验证cookie



让我们假设我们有一个网站:

  • 管理员部分
  • 客户部分
  • 来宾(访客(部分

显然,每个人都可以访问每个人的最后一个(访客部分(,而管理部门仅由管理和客户端部件 - 仅由注册客户端访问。管理员和客户端具有不同的模型类(Admin和用户相应地(存储在不同的数据库中,我们希望为每个数据库使用不同的身份验证cookie。是否可以使用ASP.NET核心身份?

我们尝试在附加定期初始化期间使用cookiename属性,但似乎在那里访问了ApplicationCookie-是相同的对象,因此第二个定义只是重写第一个:

services
    .AddIdentity<User, UserRole>(opts => {
        opts.Cookies.ApplicationCookie.CookieName = "Client";
        opts.Cookies.ApplicationCookie.LoginPath = new PathString("/login");
          .    .    .    .    .   .   
    });

services
    .AddIdentity<Admin, AdminRole>(opts => {
        //the following lines rewrite cookie options from client's to admin's
        opts.Cookies.ApplicationCookie.CookieName = "Admin";
        opts.Cookies.ApplicationCookie.LoginPath = new PathString("/admin/login");
          .    .    .    .    .   .   
    });

可能吗?是的。您需要创建自己的身份中间件来处理不同的cookie,但可以完成。

推荐?

安全性有2个单独的问题:身份验证和授权。cookies可以很好地进行身份验证(某人是(,但是您应该使用授权角色和主张(某人可以做什么并且可以访问(,这就是您的'试图在这里解决。

ASP.NET的身份框架已经对这两个角色和主张都有很好的支持,因此您可以为每个人使用标准用户模型,为某些用户添加"管理员"角色,然后根据需要添加更具体的主张。p>处理授权的文档非常详细,并为您提供了精彩的选项演练。可以通过将其添加到用户配置文件,然后在您的控制器路由方法上使用[属性]来轻松执行这两个角色和主张,如下所示:

角色:

[Authorize(Roles = "Administrator")]
public class AdministrationAreaController : Controller
{
    public IActionResult Index()
    {
    }
}

索赔:

[Authorize(Policy = "EmployeeOnly")]
public class ClientAreaController : Controller
{
    public IActionResult Index()
    {
    }
}

最新更新