码迷,mamicode.com
首页 > 编程语言 > 详细

Spring cloud微服务安全实战-5-9实现基于session的SSO(Token有效期)

时间:2019-12-01 16:40:24      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:llb   new   ken   获取   返回   用户名   清理   密码   order   

token的有效期
技术图片
会出现一种情况session有效期还没到。但是token过期了。
用户登陆着,但是token失效了 没法访问服务了。
技术图片
刷新令牌要和clientId和ClientSecret一起用,发请求才有效。
那么刷新令牌在哪里?在数据库内 我们从来没有配置这个字段。
refresh_token_validity:刷新令牌的有效期。不配置就不会发refresh_token,
技术图片
什么时候配置上了这个值,就会发refresh_token.这里配置一个 259200 ,30天的有效时间。
技术图片

token放在请求头里面去获取数据,这里可能就会发生token过期的情况。
技术图片
过期了我们就需要用refreshToken去刷新一下。

先来看一下过期的样子,这里我们设置为10秒,token的过期时间
技术图片

把发出去的access_token清理掉。把这个表内的记录都删除掉, 
技术图片

重启认证服务器和admin服务
技术图片
技术图片
因为我们的session还是有效的,可以登陆继续访问。但是我们的token信息已经没有了。 所以我会在数据库内生成一条心的token。这个token的有效期只有10秒。

刷新页面,不用登陆就进来了。 点击按钮 把获取order的信息也是可以的
技术图片

数据库内多出一个token
技术图片

用这个token去发请求
技术图片
前两个请求都是成功的,到第三个请求,token已经过期。 再发请求就会报错。
技术图片

写刷新令牌的代码

在这里判断令牌是否过期,过期就刷新令牌。
技术图片


加一个过期时间的属性
技术图片

技术图片

我们把他改成long类型
技术图片

过期时间就是当前时间,加上过期的秒数
技术图片
有了这个时间 ,就可以判断 当前是不是过期了。
过期时间是不是在当前时间之前,是的话 就是过期了。
技术图片

声明RestTemplate
技术图片



技术图片
init方法把自己当前对象返回回去。
技术图片
有可能是还有几毫秒就过期了。拿到了这个token去访问 访问过程中可能就过期了。所以这里我们再减掉3秒。
技术图片
声明TokenValue
技术图片
执行newToken的init方法,及时初始化了新的过期时间。
最终把新的access_token放在请求头上。
技术图片

callback回调这里修改

这里要init方法调用一下
技术图片

Oauth加一个配置

指定userDetailsService
技术图片
下面已经制定了authenticationManager了,上面为什么还要userDetailsService。这个userDetailsService是专门给refresh_token用的。 
我们其他的那四种授权模式,当你要认证用户的时候,都是用户名和密码一块对的,不管是授权码还是password,用户名和密码都会传过来。然后会用authenticationManager来验用户名密码。
因为下面这里。的 AuthenticationManagerBuilder这里把用户和密码都设置上了。
技术图片
技术图片
当我refresh_token的时候,是没有密码的,只有用户名,这时候我就只需要一个UserDetailsService来获取我的用户信息。↓所以下面这里要单独指定一个userDetailsService给refresh_token来用。
技术图片
注入userDetailsService
技术图片
技术图片

数据库配置

让admin这个client支持 refresh_token 在授权类型这里加一个新的类型
技术图片
技术图片
技术图片

技术图片

测试

启动认证服务和admin的服务

session都删除了  所以需要重新登陆
技术图片

技术图片
技术图片
多点击几次
技术图片

大概没隔10秒 都会出现一个比较耗时的请求。这应该就是后台去刷新令牌了。
技术图片

可以移植点下去 ,不会再报错了。因为refresh_token有效期很长,一个月。可以不断的用refresh_token来刷新令牌。
 

结束


 

Spring cloud微服务安全实战-5-9实现基于session的SSO(Token有效期)

标签:llb   new   ken   获取   返回   用户名   清理   密码   order   

原文地址:https://www.cnblogs.com/wangjunwei/p/11966240.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!