sso(单点登录)
单点登录 的相关概念就不累述了,通俗的讲就是一次登录,到处有效,免去你在不同的服务间跳转时的繁琐验证。比如某宝网站是很多个系统相互调用形成的,如果没做单点登录的话,你每跳转一个服务,都需要验证身份,想想就可怕
1.分布式session
实现单点登录的第一种做法是分布式session共享,这应该是很常见的一种方式。毕竟后端程序员没有不知道session的吧。
后端确认登录人信息时,将登录人信息存储到session中,seesion存在于服务器端,不同的后端会有不同的session,所以实现session共享的关键是将seesion放到共享的区域内,于是用到了redis,redis的数据存储形势是key-value类型的,key的话就由后台自定义方法生成,value就是存储着登录人信息的session。
然后将key放到cookie中一份,这样浏览器就有了可以拿到用户登录信息的“钥匙”了。在不同模块之间跳转的时候,只要有这把钥匙,就能从redis里面拿到用户信息,实现免登登录了。
2.JWT
JSON Web Token 设计的初衷就是要脱离“session”,关于他的几本概念,推荐看一下阮一峰先生的博客
用户登录后将json格式的登录信息返回给浏览器,这些信息经过签名加密后的信息叫做token,存储在 Cookie 中,但是这样不能跨域,所以一般是是放在 HTTP 请求的头信息Authorization字段里面。然后后端redis里面也存储一份登录信息。每一次token到达后端后,经过解密工具的解密再和redis中信息进行比对,从而实现免登陆。
https://www.cnblogs.com/ZenoLiang/p/8334614.html
https://blog.csdn.net/json_ligege/article/details/51764215
https://www.jianshu.com/p/8401582c0ef1
方法1
登录成功之后通过 url带token参数跳转 比如阿里云登录万网的方式
方法2
在js里获取登录服务器的token
jQuery.getScript(“http://localhost:8081”,function(){console.log(token);});
方法3
登录成功之后 跳转到 (一站登录把全站都登录上)
方法4
登录成功之后 跳转到 (一站登录把全站都登录上)
思路:
比如A应用 使用 公共SSO登录
A应用先判断自个session是否为空,为空再用方法2js跨域获取SSO的信息,获取到之后再调用 A应用自己存session方法,登录成功刷新。
在整个过程考虑一下安全问题就可以了。
以上的几种方式是我自己整理不需要加入复杂比较重的框架的简单SSO实现
用以上的方法必须设置SSO服务端允许跨域