SSO的基本原理与Java代码实现
推荐阅读:单点登录原理与简单实现
基本原理
Http无状态协议。浏览器使用http协议对服务器发出的每一次请求,服务器都会独立处理,不与之前或之后的请求产生关联,即无状态。所以为了保护服务器的某些资源,必须限制浏览器请求,鉴定请求的合法性。既然http无状态,就让服务器和浏览器共同维护一个状态,即会话机制。
会话。浏览器第一次请求服务器,服务器创建一个会话,并将会话的id作为响应的一部分发送给浏览器。浏览器存储该id,并在第二次第三次请求时带上该id,服务器取得请求中的会话id就知道是不是同一个用户了。
会话机制。服务器在内存中保存session对象。浏览器在cookie中保存sessionId,在Tomcat中sessionId用的是
JSESSIONID,流程如下:
浏览器第一次输入帐密,服务器拿到帐密去数据库比对,比对正确说明是合法用户,将该会话标记为“已授权”或“已登录”的状态,该会话状态被服务器保存在会话对象中,当用户再次访问时,服务器在会话对象中查看登录状态,判断是否合法,合法后才允许访问。
单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器和服务器之间维护会话状态,但cookie受到域的限制(通常对应网站的域名)。浏览器在发送http请求时会自动携带与该域匹配的cookie,而不是所有cookie。。需要注意的是,曾经流行过的顶级域名的方式虽然可行,但面临着应用群域名不统一,技术不同,共享cookie无法跨语言平台登录,cookie本身不安全等诸多问题。












