봄 클라우드 보안 서비스의 전투 -5-9 SSO의 마이크로 기반 세션 (토큰 기간)

토큰이 유효

경우 세션 기간이 아직 도착하지 않은 것입니다. 그러나 토큰이 만료되었습니다.
사용자로 로그인하지만, 토큰 캔의 실패가 아니라 서비스에 액세스 할 수 있습니다.

토큰을 새로 고치고 된 ClientID 및 ClientSecret 함께 사용하기 위해, 재전송 요청이 유효합니다.
그렇다면 새로 고침 토큰입니까? 우리는 데이터베이스 구성에 결코이 분야가 없습니다.
refresh_token_validity : 유효한 토큰 새로 고침. 어떤 구성, refresh_token도하지 전송하지 않습니다

이 값을 구성 할 때, 그것은 refresh_token도 보내드립니다. 구성 259200 30 일 다음은 유효 시간을.


토큰 요청 헤더 취득 데이터에있는, 케이스 토큰이 만료가 발생할 수도있다.

우리가 새로 고침 refreshToken를 사용할 필요가 만료되었습니다.

길의 만료에 첫 모습은, 우리가 10 초에 대한 토큰 만료 시간으로 설정되어


멀리 지워 access_token이 문제가 이동합니다. 이 테이블의 레코드가 삭제됩니다 


인증 서버 및 관리 서비스를 다시 시작합니다


우리의 세션이 여전히 유효하기 때문에, 당신은 착륙을 계속 액세스 할 수 있습니다. 그러나 우리의 토큰은 아무런 정보가 없습니다. 나는 데이터베이스에 하나의 마음의 토큰을 생성합니다 그래서. 이 토큰은 10 초 동안 유효합니다.

착륙에 와서하지 않고 페이지를 새로 고칩니다. 주문 정보이 가능 얻기 위해 버튼을 클릭


토큰보다 더 많은 데이터베이스 내


보낼 토큰 요청에

처음 두 요청이 성공적으로 만료 된 토큰 세 번째 요청. 재전송 요청이 주어집니다.

토큰 코드를 새로 쓰기

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



加一个过期时间的属性




我们把他改成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来刷新令牌。
 

结束


 

추천

출처www.cnblogs.com/wangjunwei/p/11966240.html