【发布时间】:2014-09-01 08:52:55
【问题描述】:
我有一个在 ASP.Net MVC 中构建的 HR Web 应用程序,分为多个区域,例如经理、员工。这些区域代表系统中能够执行不同任务的不同类型的用户。涉及到一个遗留数据库,每种用户类型的信息都存储在不同的表中。此外,为每种用户类型存储的信息类型不同,因此将表分开是有意义的。
我希望实现基于声明的身份验证有几个原因:第一,在客户端上存储每个用户的详细信息会更容易,例如用户名、角色等。另一个原因是 ClaimsPrincipal 支持多个身份。这很重要,因为在某些情况下,一个人可能需要同时以多个身份访问系统。例如。经理需要访问系统才能执行管理任务,但经理也恰好是员工,应该能够以员工身份登录系统。每个区域都是单独处理的,因此即使用户既是经理又是员工,他们也必须分别登录到每个区域。
所以这是我的问题:通过 ClaimsPrincipal 的多个身份是否可行?还有其他一些我忽略的技术吗?如果多个身份是要走的路,我如何将用户从一个区域注销,但如果他们碰巧同时登录到另一个区域,如何让他们登录到另一个区域?通常,要注销,代码如下所示:
FederatedAuthentication.SessionAuthenticationModule.SignOut();
我的假设是这将使用户退出这两个区域。它是否正确? 假设是这种情况,我想我可以简单地从 ClaimsPrincipal 中删除特定的 Identity,然后重置并写入 SessionSecurityToken,但是 ClaimsPrincipal 没有删除方法,只有 AddIdentity。于是我想出了下面的伪代码:
退出时:
- 计算 ClaimsPrincipal 中的身份数
- 如果 count == 1 则正常注销
- 如果 count > 1,由于我们无法删除身份,循环遍历身份并创建一个新的 ClaimsPrincipal 排除我们要注销的身份,然后重置并写入 SessionSecurityToken
我在正确的轨道上吗?有没有一些很好的例子来说明如何在 ClaimsPrincipal 中实现多个身份?我进行了搜索,虽然我发现了多个身份的简要提及,但我没有找到实际示例。
【问题讨论】:
标签: c# asp.net-mvc wif claims-based-identity