토큰이 유효
경우 세션 기간이 아직 도착하지 않은 것입니다. 그러나 토큰이 만료되었습니다.
사용자로 로그인하지만, 토큰 캔의 실패가 아니라 서비스에 액세스 할 수 있습니다.
토큰을 새로 고치고 된 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来刷新令牌。
结束