Spring cloud微服务安全实战-5-9实现基于session的SSO(Token有效期)
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有效期)的更多相关文章
- 《Spring Cloud微服务 入门 实战与进阶》
很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...
- Spring Cloud微服务安全实战_00_前言
一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介: 二.最终形成的架 ...
- Spring cloud微服务安全实战_汇总
Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...
- Spring Cloud微服务安全实战_4-5_搭建OAuth2资源服务器
上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后, ...
- Spring Cloud微服务安全实战_4-3_订单微服务&价格微服务
实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xml ...
- Spring cloud微服务安全实战 最新完整教程
课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...
- Spring cloud微服务安全实战-6-8sentinel限流实战
阿里2018年开源的. 简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉.保证服务高可用. 流控 先从最简单的场景来入手. 1.引用一个依赖, 2,声明一个资源. 3.声明一个规则 注意 ...
- Spring cloud微服务安全实战-6-4权限控制改造
授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...
- Spring cloud微服务安全实战-6-2JWT认证之认证服务改造
首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...
- Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
授权模式改造成了Authorization code完成了改造的同时也实现了SSO.微服务环境下的前后端分离的单点登陆. 把admin的服务重启.刷新页面 并没有让我去登陆,直接就进入了首页. ord ...
随机推荐
- 如何通过cmd获取到域名下的ip地址?例如获取百度的域名
百度首页的IP地址为[119.75.217.109] 你可以通过电脑本机进行查询,查询步骤如下: 1.点击[开始]--->>[运行],输入[cmd]: 按键盘上的[Win键]+[R键],调 ...
- 采集新浪新闻php插件
今天没事,就分享一个采集新浪新闻PHP插件接口,可用于火车头采集,比较简单,大家可以研究! 新浪新闻实时动态列表为:https://news.sina.com.cn/roll/?qq-pf-to=pc ...
- jmeter 压测工具安装及使用
linux下jmeter安装: 1. 下载JMeter官方网站下载最新版本: http://jmeter.apache.org/download_jmeter.cgi ,目前最新版是Apache JM ...
- 如何修改host
因不可抗拒的原因,有些网站会被q,但只是比较恶心的域名DNS污染,并不需要tiizi,修改hosts文件即可. 以 www.youneed.win 为例: 首先,进入目录:C:\Windows\Sys ...
- 动态加载 ShellCode绕过杀软
反病毒解决方案用于检测恶意文件,并且通常使用静态分析技术来区分二进制文件的好坏.如果是恶意文件本身包含恶意内容(ShellCode),那么依靠静态分析技术会非常有效,但如果攻击者使用轻量级的stage ...
- thinkpadT470P安装问题
[问题描述]: 最近在将Thinkpad E430c的ubuntu系统重装成windows 7的过程中,出现了装好win7系统后,开机自动进入boot menu界面的问题,而且不论你选择从光驱还是硬盘 ...
- fhq treap ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
二次联通门 : LibreOJ #104. 普通平衡树 #include <cstdio> #include <iostream> #include <algorithm ...
- AtCoder Grand Contest 015题解
传送门 \(A\) 找到能达到的最大的和最小的,那么中间任意一个都可以被表示出来 typedef long long ll; int n,a,b;ll res; int main(){ scanf(& ...
- 2019暑期金华集训 Day7 动态规划
自闭集训 Day7 动态规划 LOJ6395 首先发现这个树的形态没啥用,只需要保证度数之和是\(2n-2\)且度数大于0即可. 然后设\(dp_{i,j}\)表示前\(i\)个点用了\(j\)个度数 ...
- 模板 - 字符串 - KMP算法
要先理解前缀函数的定义,前缀函数 \(\pi(i)\) 表示字符串 \(s[0,i]\) 的同时是其最长真前缀及最长真后缀的长度,简单来说就是这个 \(s[0,i]\) 首尾最长的重叠长度(不能完全重 ...