Asp.net 单点登入实现

最近有个需求,就是针对内部多个的web应用实现从OA(古老的asp.net)的单点登入,其他系统可以通过链接免输入帐号密码登入,以下是我实现的技术方案。
 在主应用系统登入时,将会话信息保存到数据库中,作为授权其他应用系统免登入授权凭据。流程如下:
Asp.net 单点登入实现_第1张图片
数据库保存的主要授权信息:用户当前IP,用户名,会话ID,已登入站点名称.
   
通过此种方式,不仅可以保证信息安全,登入主站点后,甚至客户端应用程序也可以通过授权接口实现免登入。

现在我们来看具体实现:
Asp.net 单点登入实现_第2张图片
使用vs2010新建了项目如上图,分别建立了一个服务项目,一个主网站,一个其他靠验证登入的网站。
贴上各个项目的核心实现:
数据库表:
Asp.net 单点登入实现_第3张图片
表主要用于记录主站的登入信息,包括用户名,登入的IP地址,主网站的名称,SessionID,会话创建时间
主网站在登入成功后的核心代码:
Asp.net 单点登入实现_第4张图片
子网站:
Asp.net 单点登入实现_第5张图片
LoginService验证服务的接口
Asp.net 单点登入实现_第6张图片
上图是子网站调用的验证接口实现。
通过这种方案,可以轻松的实现子应用依靠主应用的登入信息获得许可,同时也不会 影响他们各自的许可登入。
期间遇到我们本计划在Session_End事件中删除会话,无奈发现会话保存在StateServer时无法执行 Session_End事件(启用单独的进程),所以改用在主站用户注销时删除会话信息(用户必须通过注销关闭网站才是合法的,针对意外关闭的保留在数据库中的垃圾会话信息,会在最后一次注销时依据user_Name作为条件一并删除)。

你可能感兴趣的:(Web)