【发布时间】:2017-10-29 23:13:49
【问题描述】:
假设我们有一个网站:
- 管理部分
- 客户部分
- 客人(访客)部分
显然,每个人都可以访问最后一个(访客部分),而管理部分 - 仅由管理部门和客户部分 - 仅由注册客户访问。 管理员和客户端具有不同的模型类(对应的 Admin 和 User),存储在不同的数据库中,我们希望为它们中的每一个使用不同的身份验证 cookie。 是否可以使用 ASP.NET Core Identity?
我们尝试在 AddIdentity 初始化期间使用 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");
. . . . . .
});
【问题讨论】:
-
您不应该为每个角色拥有一个身份,您应该为每个安全需求拥有一个角色。您很可能需要一个自定义 IdentityStore,您可以在其中根据某些逻辑决定是查询 User 还是 Admin db
-
嗯,你可能将它们存储在不同的数据库中,但从应用程序的角度来看,它们都是用户。我知道这并不能回答你的问题,但我想说的是,也许你应该重新考虑你的设计。
-
对我来说听起来像是 2 个(或 3 个)不同的应用程序。
标签: c# asp.net cookies asp.net-core asp.net-identity