单点登录:简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。简单来说,一个公司有多个应用,都要进行注册登录,退出的时候又要一个个退出。用户体验很不好。单点登录可以实现:登录的时候只要一次登录,退出的时候只要一次退出。
单点登录实现的方式:
父域Cookie(同主域名)
- cookie: cookie的作用域由path和domain共同决定,domain的值为当前域或其父域的域名/IP地址。path 默认为当前 Web 应用的上下文路径。
- 父域: 父域的cookie可以被子域所共享。
结论:可以将token储存到父域中,将domain设置成父域名,path设置为根路径。实现简单,但不支持跨主域名
认证中心(不同主域名,最常用解决方案)
- 认证中心: 一个专门负责处理登录请求的独立的 Web 服务。(每个系统的登录操作都是通过认证中心实现的。)
实现过程:访问应用时,会判断是否登录,未登录则会跳转至认证中心,认证中心登录成功之后会在认证中心写入cookie,应用中无法访问。应用则是通过认证中心跳转的url中取到用户登录成功的token,再将token存储在当前应用中
结论 支持跨域,扩展性好,是单点登录的标准做法。但当应用A中使用iframe嵌入应用B时,则会出现一闪而过的认证中心登录界面。
LocalStorage 跨域(不同主域名)
采用LocalStorage存储token, 但localStorage不支持跨域,则需要登录一个网页时,需要在本网页在localStorage时,也需要为其他的页面写入相应的token.
- iframe: 可以嵌入其他页面,通过postMessage进行安全的传值。
- 目标网页: 可以通过addEventListener监听postMessage的信息,从而得到相应的token信息。
扩充
域名分级
com、.cn 为一级域名(也称顶级域名),.http://com.cn、http://baidu.com 为二级域名,http://sina.com.cn、http://tieba.baidu.com 为三级域名,以此类推,N 级域名就是 N-1 级域名的直接子域名。参考文章
面试官:来说说单点登录的三种实现方式
单点登录