sso实现的两种方式 (简述)

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中信息进行比对,从而实现免登陆。

我今天搜了一下两者之间的比较,网上没有说谁更好。可能更多的是个人的选择吧,侧重什么选什么。我也会用第二种方法去尝试的在项目中实现单点登录,到时候在把心得整理下来,待续…

你可能感兴趣的:(java)