sso单点登录和跨域问题

一、SSO体系结构

SSO

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

体系结构

当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--token;用户再访问别的应用的时候就会将这个token带上,作为自己认证的凭据,应用系统接受到请求之后会把token送到认证系统进行校验,检查token的合法性。如果通过校验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了 。
Token(令牌)

token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。

当用户第一次登录后,服务器生成一个token并将此token返回给客户端,客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。 以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。

二、同域SSO原理分析

设计token的值可以有以下方式
1、用设备mac地址作为token2、用sessionid作为token
实际上,HTTP协议是无状态的,单个系统的会话由服务端Session进行维持,Session保持会话的原理是通过Cookie把sessionId写入浏览器,每次访问都会自动携带全部Cookie,在服务端读取其中的sessionId进行验证实现会话保持。同域下单点登录其实就是手写token代替sessionId进行会话认证。

token的生成

服务端生成token后,将token与user对象存储在Map结构中,token为Key,user对象为value,response.addCookie()生成新的Cookie,名为token,值为token的值。

token过期移除

将服务端的token从Map中移除,再删除浏览器端的名为token的Cookie。

认证流程
在这里插入图片描述

三、跨域SSO原理分析

当有多个系统时,认证机制的流程如下:

提供用户登录界面,供用户进行身份认证用户验证通过后,生成新token将token<->user 对存入全局MAP中供校验将token写入所有域的Cookie中页面重定向回原始请求URL分析

当系统有多个并且在不同域(domain)时,Cookie只会作用在当前域下。将token写入所有域的Cookie中才是解决跨域SSO的核心。
在这里插入图片描述

写的比较好的文章

发布了45 篇原创文章 · 获赞 2 · 访问量 2572

猜你喜欢

转载自blog.csdn.net/u013915286/article/details/105023066
今日推荐