SSO(单点登录)的实现

SSO(单点登录)的介绍:

    全称是Single Sign On,简单的说就是在多个应用的情况下,用户只需在其中一个应用中进行登录操作,那么在访问其它应用的时候用户就不需要再进行登录操作。对于用户的登出操作也是如此,只在其中一个应用中进行登出,其它的应用也会登出该用户。

 

SSO(单点登录)的实现:

    先附上借鉴的文章:

        https://github.com/justlive1/earth-mist

        http://www.cnblogs.com/ywlaker/p/6113927.html#!comments

 

    本例的SSO(单点登录)是在B/S结构下实现的。技术框架图如下:

    注意:以上的Web应用都是部署在Tomcat服务器上的。     

 

SSO(单点登录)的流程:

    1.用户使用浏览器访问请求多个SSO-Client客户端的其中一个。

    

 

    2.SSO-Client的Filter(过滤器)拦截请求,检查Web应用上的Session域是否有登录标识,由于是第一次请求,Session域没有登录标识。再检查请求上是否有Token,没有Token,携带当前请求的URL重定向访问SSO-Service(认证中心)。

 

3.SSO-Service(认证中心)的Filter(过滤器)拦截请求,获取Cookie中的TGC(全局会话),发现没有TGC,Filter过滤器放行请求,SSO-Service(认证中心)响应登录页面。

 

4.用户在登录页面上输入账号密码进行登录发出登录请求,登录请求被SSO-Service的Filter拦截,获取Cookie中的TGC(全局会话),发现没有TGC,Filter放行请求。SSO-Service校验账号密码,有误响应登录页面,无误生成Token,把Token保存进Redis(Token保存为Set数据类型的Key)和SSO-Service的Session域中,再把SessionID保存进Cookie中Key是“TGC”。最后携带Token重定向到SSO-Client。

 

5.SSO-Client的Filter拦截请求,检查Web应用上的Session域是否有登录标识,Session域没有登录标识。再检查请求上是否有Token,有Token,使用HttpClient发送HTTP请求访问SSO-Service并携带上请求URL,Token,本应用的SessionID。SSO-Service的Filter拦截请求,由于这次请求由HTTPClient发出没有Cookie无法获取TGC,Filter放行请求。SSO-Service校验Token,检查Redis中是否有该Token,Token存在就把请求上携带的URL和SessionID并接后保存到Redis中,SSO-Service响应回SSO-Client校验Token有效,SSO-Client把Token添加到Session域中标识用户在该Web应用中已登录,最后Filter放行请求。

 

6.当用户请求访问第二个SSO-Client的Web应用,该SSO-Client的Filter拦截请求,检查Web应用上的Session域是否有登录标识,由于是第一次请求,Session域没有登录标识。再检查请求上是否有Token,没有Token,携带当前请求的URL重定向访问SSO-Service(认证中心)。(重复第2个步骤

 

7.SSO-Service的Filter拦截请求,获取Cookie中的TGC,TGC获取成功,根据TGC获取全局会话(SSO-Service的Session),从Session中获取Token,携带该Token重定向请求到第二个SSO-Client应用。

 

 

8.(重复第5个步骤

 

单点登出的实现:

1.用户使用浏览器发出登出请求访问SSO-Client客户端,SSO-Client的Filter对登出请求放行。获取SSO-Client的Session中是否有登录标识,有就携带请求URL和Session中的登录标识Token重定向到SSO-Service。

 

2.SSO-Service的Filter对登出请求放行,SSO-Service获取请求URL上携带的Token,检查Redis中是否有该Token,并通过Token获取Redis中的Set类型数据,通过该数据就能够得到已经注册到SSO-Service(认证中心)的SSO-Client客户端URL与该客户端的SessionID,以SSO-Client客户端的URL使用HttpClient发送请求并携带SessionID到各个SSO-Client中要求其销毁Session中的登录标识,最后SSO-Service也销毁自己的Session中的登录标识和删除Cookie中的"TGC"并使用重定向请求访问回一开始的SSO-Client。

 

 

 

最后附上代码的实现:https://github.com/20170703Register/SSO---Single-Sign-On

如有错误欢迎指出。

 

posted on 2018-06-01 16:04  /***/  阅读(544)  评论(0)    收藏  举报

导航