SSO单点登录(原理)
单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。
-------------------------------------------------------------------------------------------------------------------------------------------------------
相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。这个过程,也就是单点登录的原理,用下图说明
单点登录客户端Cookie和服务端Session图解
步骤1:
描述:初始状态:没有请求,服务端没有session,客户端也没有cookie
步骤2:
描述:当客户端访问www.crm.com时,本地没有cookie,在crm.com服务端中查看是否有局部session,此时发现crm.com系统并没有,尴尬的局面需要缓解一下,需要查看统一认证中心(sso.com服务端)是否有登录(然而此时并没有,虽然合乎情理,但又尴尬了),此时,需要做一件很重要的事情:把当前请求的地址作为参数传递给统一认证中心!!!
步骤3:
描述:由于这是客户端第一次对这个系统的访问,客户端浏览器Cookie中的sso.com目录也没有cookie,所以sso.com服务端也没有全局的session,这时候调用sso.com中的checkLogin方法查看当然不会有全局的session。
步骤4:
描述:此时需要把redirectUrl从地址栏中获取出来,把这个参数放入到request域中,一起转发到统一认证的登录页面。
步骤5:
描述:在统一认证中心登录界面输入账号和密码,并带着上一次访问的地址(因为登录成功以后,需要跳转到上次访问的页面)请求到 sso.com服务端进行身份校验(查询数据库);校验成功即后台登录成功,需要在sso.com中创建session对象和token(令牌),并把这个token信息放入到session中,方便后续的校验;把session的id以cookie方式写入到客户端的浏览器中;重定向到最开始访问的页面(会带着sso.com产生的token)
步骤6:
描述:客户端浏览器重定向到crm.com&token=*****,过滤器拦截到请求,判断是否有局部session,发现其并没有,但是带着token参数,则此时为了保证安全,必须检验token的有效性,即判断这个token是否来源于统一认证中心。
步骤7:
描述:使用HttpURLConnection发送请求(这个请求带着token)到sso.com服务端,sso.com查询数据库,看是否存在该token,如果存在,则返回ture,否则返回false
步骤8:
描述:crm.com服务端接收到sso.com服务端的响应(token是ture还是false),若结果为ture,crm.com服务端就会创建局部session,并设置属性isLogin=ture;放行客户端的请求,客户端显示请求的页面,同时,将crm.com服务端的JSESSIONID写入到客户端的Cookie的crm.com目录下,方便第二次及之后的访问!!!
步骤9:
描述:第二次访问crm.com时,请求会把本地浏览器的Cookie带上(当然是crm.com目录中的),在crm.com服务端能找到对应的session,并得到相应的isLogin的属性,是ture,说明已经有局部会话了,此时就放行请求
步骤10:
描述:访问wms.com服务端的原理同上
步骤11:
步骤12:
步骤13:
步骤14:
步骤15: