在真正学习单点登录之前,我们首先来看一下,B/S架构下的信息传输的方式,BS架构的传输基础是http协议,标准的http协议是一种无状态协议,也就是说browser的每一次请求之间没有任何关联,都是互相独立的,本次请求不会受上次请求的影响,没有cookie、session这些概念,随着应用场景的增多,请求之间需要具备交互的能力,就出现的会话的功能。
会话:浏览器第一次访问服务器,服务器会创建一个会话,生成会话ID,并将会话ID作为参数返回给浏览器,浏览器再一次发送请求时会携带该会话ID,服务器就会判断两个请求是否是同一用户,服务器以对象的形式保存,而客户端是将会话ID保存在cookie中,简单来说一下cookie,cookie是一中保存少量信息的文本文件,匹配具体的域名,里面保存该域名下的用户名、密码等信息,cookie有其时效性,可以自行设置,并且为了保证安全性,很多cookie都是加密的。
单点登录:从上面的说明来看,我们可以通过会话实现单点登录,但是存在很多的局限,比如cookie的调用是基于域名的,当前很多的应用系统具有不同的域名,统一整合不太现实,这样实现单点登录就有了很多的局限,另外本身cookie安全性存在问题,文本存储在客户端容易遭到窃取和泄露。
所以为了实现单点登录,当前采用的方式是统一搞一个认证中心,这里认证中心主要用来做认证、授权,对来自客户的请求,进行身份认证,认证通过后会生成状态信息(令牌),将令牌发送给应用系统(服务器),服务器会拿着令牌去认证中心校验(防止伪造令牌),验证成功后,服务器会创建和客户端的局部会话,这个局部会话只涉及客户端和单一应用系统,这样就解决了cookie的局限性。
注意当客户端和服务器建立局部会话后,所有的数据交互就不再经过认证中心,此时存在客户端和认证中心的全局会话和客户端与服务器的局部会话