【发布时间】:2012-03-18 12:01:54
【问题描述】:
我有一个 ASP.NET MVC 站点,其中一个 CAS 服务器设置为身份验证类型。我还有一个单独的数据库,其中包含一个用户表和一个角色表(用户与一个或多个角色相关)。只有当用户名同时在用户表和 CAS 系统中时,用户才能登录系统。我有这个解决方案工作。
我的问题是我现在需要在 User.IsAuthenticated 上使用某种形式的触发器,以便我可以跟踪当前用户(来自我的数据库),而我不可能尝试允许跟踪已注销的用户。我一直在想的是我需要将用户添加到 HttpContext 但如果 CAS 会话超时或用户注销,我不确定如何触发用户的清除。
我还希望有一些功能,例如 User.IsInRole(再次使用我的数据库,而不是 ASP.NET),但我不确定如何实现它。我想如果我可以成功地将用户添加到 HttpContext 中,那么 IsInRole 方法将只是一个 User.Roles.Contains(string role) 方法,但是如果我希望,例如,使用具有DataAnnotation [授权(角色=“ExampleRole”)]。
我查看了诸如How do I create a custom membership provider for ASP.NET MVC 2? 之类的问题,但这对我不起作用(可能与我使用 CAS 身份验证有关?)
任何指导或背景阅读将不胜感激,因为我真的不确定我应该从哪里开始。我已经阅读了 GenericPrinciple、IPrinciple 和 IIdentity,但我正在努力了解如何将它们应用到我当前的项目中。
【问题讨论】:
-
你看过nerddinner吗?他们实现了 CAS,并使用
FormsAuthenticationTicket在标准成员资格提供程序之外存储详细信息。 -
@Brad 感谢您的链接,有趣的是,自从我上次看到它以来,nerddinner 发生了多大的变化。不幸的是,我真的看不到那里的代码可以帮助我,首先我的身份验证代码完全不同(我正在使用 Jasig-CAS 不确定这是否会有所不同),而且,从我能告诉,FormsAuthenticationTicket 存储的唯一数据是用户名和到期时间(我无法提供到期时间,因为 Jasig-CAS 服务器不受我控制,我不确定到期时间是什么,它可以也从其他网站更新)而我需要存储一个类
标签: c# asp.net-mvc-3 authentication cas jasig