springcloud security和springsession实现sso
一、目前实现sso的三种方式
1.使用oauth2,不用session,构建一个authorization server,其他微服务都定义成resource server,使用rsa私钥签名jwt token访问服务。将认证生成的jwt token存储在前台session storage,每次请求,携带authorization 请求头请求服务。
2.使用oauth2,使用session,构建一个authorization server,其他微服务都定义成resource server,使用rsa私钥签名jwt token访问服务。但是不将jwt token保存在前台,而是将jti存于cookie中。使用鉴权网关,每次请求通过jti获取jwt,再请求后台服务。
3.使用spring session,实现sso,这种方式相对要简单。这种方式是传统的方式。也是本博客将要分享的方式。
二、三种实现方式见解
前两种方式大体相同,唯一区别在于jwt存储位置。首先对于前台,博主不熟,据说session storage只能当前页面使用,通过这个特性保证jwt口令的安全。但是衍生出第二种,应该是部分架构师对此的不放心,所以将jwt改为存储在后台,防止jwt口令的泄漏。但是这操作也相当于将jwt口令从无状态特性转变为有状态特性。
关于jwt的特性,在此做简单的讲解。jwt本身是一个包含用户名,口令有效期,用户权限,还有其他一些附加信息的json通过RSA私钥签名生成的无状态字符串,