如何实现单点登录系统

(1)问题分析:

考官主要想考察在分布式系统中不同子系统间如何实现一次登录多处访问的具体实现和流程。

(2)核心答案讲解:

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用 于同一个用户的登录的机制。

而完成单点登录典型核心技术实现有CAS。CAS主要完成认证工作。

CAS结构体系包含两部分:

CAS Server,CAS Server主要负责完成对用户的认证工作,CAS Server 是一台应用需要独立部署。 CAS Server 可能会到数据库或 XML 文件中检索用户密码进行认证工作。

CAS Client,CAS Client 一般表示业务系统(即我们开发的项目)但是在项目中添加了 CAS 的各类过滤器;对受保护的资源进行身份认证,它将认证重定向到CAS Server 中进行。

具体实现过程如下:

在用户浏览器中要访问系统 A 时,将在系统A里面重定向到 CAS Server 进行登录验证;如果没有登录那么跳转到 CAS Server 的登录页面,用户在该登录页面需要输入帐号和密码;然后数据正确的话,那么在 CAS Server 中将用户信息进行加密保存到 Cookie(TGC(Ticket Granted Cookie))。 这时再由 CAS Server 生成一个 ticket 一次性凭证,随带这个 ticket 重定向到系统 A;再由系统 A 获取到的 ticket 再重定向回 CAS Server,验证 ticket 后系统 A 将用 户认证信息存入自身系统的 session 里。以后访问会先到系统 A 的 session 查找用 户信息,如果能找到则说明已经登录认证;如果 session 中读取不到用户信息那 么会到CAS Server 根据浏览器中读取到的 cookie(TGC(Ticket Granted Cookie))获取用户信息并返回,如果还没有那么则和前面认证流程一样需要登录等。访问系 统B 的时候因为其 session 中无用户信息将会到 CAS Server 中根据cookie 读取用 户信息,从而实现不用再次登录即可访问系统 B 资源。在退出的时候,CAS Server 会删除 TGC 对应的 TGT,并通知各个已登录过的服务器退出登录(删除 session 信息)。

流程图如下:

拓展图如下:

(3)问题扩展:

CAS主要是完成认证的工作,在完成认证之后还需要根据登录用户的权限进行授权完成对不同权限访问不同资源的工作,即授权,授权工作可以通过CAS整合Springsecurity进行授权,在认证通过后将用户信息存储在SecurityContextHolder中,再通过Springsecurity的AccessDecisionManager进行授权。

具体流程如下:

(4)结合项目中使用:

项目中使用CAS作为单点登录解决方案,权限控制用了SpringSecurity,所以项目中使用了CAS+SpringSecurity整体做权限和登录解决方案

点击此处
隐藏目录