refresh_token过期了怎么办,虽然可以设置一个比较长的有效期,但是终归还是要过期的。
只能从认证服务器重新走认证授权的流程。
两种情况
1,session还没过期的,跳过去之后,直接就知道你是谁,生成一个令牌返回给你
2.session也过期了,重新输用户名密码登陆
也可以去控制,一旦refres_token过期了。在跳往认证服务器之前,整个全都退出掉。就是refresh_token过期了 就要求用户必须重新输入用户名密码重新进行登陆。

刷新令牌的时候,加一个错误处理。

刷令牌失败就重新走认证
把刷新令牌的操作放在 try catch里面。sendZuulResponse设置为false,表示请求到这就截止了。

返回状态码为500,返回的json信息

最后把相应类型设置为json类型

前端代码处理

app.intercetor.ts文件

现在要写的是一个拦截器,统一处理状态码是500 并且,message是refresh fail的失败消息。调用任何一个服务都可能受到这个消息。

因为当前的这个请求是在ZuulFilter里面。所有调后台请求的都可能触发这个返回。

前台也需要一个拦截器,统一拦截这样的相应,然后做一个相应的处理。

前端拦截器讲解

没有现场写,直接把代码粘贴过来的

这个拦截器是要注入大HttpClient里面去拦截请求的。所以这里加了一个可注入的注解@Injectable()

修改名字为RefreshInterceptor它实现了HttpInterceptor

angular8 支持支持,构造函数的注入。下面要发送Http请求,所以注入HttpClient

req是当前发的请求,next是下一步的处理

在做下一步处理的时候,实际上是可以改变request里面的好多东西,比如说req.body,都是可以重新赋值的 在这个拦截器里面。

我要做的是在http发出去,有了响应之后的处理,响应是500 message是refresh fail的时候,我要做一个处理。

pipe管道服务处理,tap里面有两个方法,第一个是成功 第二个是失败。我们要做的就是失败的处理。成功处理里什么都没写

首先把错误的信息打印出来。然后看状态码是不是500,error.message是不是refresh fail。如果这两个都对上了就表示我是在刷新令牌的时候出问题了。拿不到可以用的令牌了。必须让用户去重新去获取令牌。整个认证授权的流程。
这个时候就调用退出方法。

调到认证服务器的退出上,然后再跳回来。再出发授权请求。再登陆。

拦截器的注册

注册的语法也是angular特有的语法

multi为true表示可以反复使用,

引入包


这样就会把我们的拦截器做为http的拦截器,加到http的模块里面。这样我发请求的时候,拦截器就会起作用了。

数据库内 refresh的token改成20秒

把之前发出的token和session相关的表都清空表。

恢复到一个初始的状态

启动服务测试




10秒的accessToken和20秒的refreshToken


一直点击到了20秒左右的时候,系统就没法访问了。

点击确定跳转到了登陆页面。因为我的刷新令牌也已经完全失效了。

重新登陆


重复点击 20秒左右还是会失效。

依赖认证服务器的session

禁用了退出的方法,refresh_token失效以后,跳转到认证的页面。认证服务器会判断session失效了没,失效了就登陆,没失效就返回新的token

跳过去 ,然后又跳回来了。还是在当前这个页面上。

再点击按钮 ,又有效了

不停的点击大概 10秒左右

点击确定又到了首页。

总结

优点:安全,用户的信息 token的信息啊 都是放在session里面的,在浏览器里面只有一个sessionId一个无意义的串,只要在浏览器那边做好session固定攻击的防护,一般是不会有社么风险的
2.可控性高。session、token的信息都在数据库里面,想让谁下线就下线,

3.跨域

缺点:复杂度高,前端session有过期时间,认证服务器有过期时间,访问令牌有过期时间,刷新令牌也有过期时间,必须清楚每一种东西是干嘛的,它过期后对系统会产生什么样的影响。应该怎么去处理,系统的行为是什么。要有一个清晰的认识。才能把这个方案用好。
占用系统资源,如果用户上亿,这种方案就是不可行的,适用于百万用户以下,发出的token的表里面,session的表里面,顶多就是100来万数据
适用于内部的管理系统,

结束

Spring cloud微服务安全实战-_5-10实现基于session的SSO(Token有效期)的更多相关文章

  1. 《Spring Cloud微服务 入门 实战与进阶》

    很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...

  2. Spring Cloud微服务安全实战_00_前言

    一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介:  二.最终形成的架 ...

  3. Spring cloud微服务安全实战_汇总

    Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...

  4. Spring Cloud微服务安全实战_4-5_搭建OAuth2资源服务器

    上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后, ...

  5. Spring Cloud微服务安全实战_4-3_订单微服务&价格微服务

    实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xml ...

  6. Spring cloud微服务安全实战 最新完整教程

    课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...

  7. Spring Cloud微服务安全实战_4-1_微服务网关安全_概述&微服务安全面临的挑战

      第四章  网关安全 这一章从简单的API的场景过渡到复杂的微服务的场景 4.1 概述 微服务安全面临的挑战:介绍中小企业的一个微服务架构,相比第三章的单体应用的简单的API所面临的哪些挑战 OAu ...

  8. Spring cloud微服务安全实战-6-8sentinel限流实战

    阿里2018年开源的. 简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉.保证服务高可用. 流控 先从最简单的场景来入手. 1.引用一个依赖, 2,声明一个资源. 3.声明一个规则 注意 ...

  9. Spring cloud微服务安全实战-6-4权限控制改造

    授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...

  10. Spring cloud微服务安全实战-6-2JWT认证之认证服务改造

    首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...

随机推荐

  1. 《BUG创造队》作业8:软件测试与Alpha冲刺(第五天)

    项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 BUG创造队 作业学习目标 (1)掌握软件测试基础技术.(2)学习 ...

  2. spring boot学习笔记(一)

    (翻译看个人意愿) 官方介绍: Spring Boot makes it easy to create stand-alone, production-grade Spring based Appli ...

  3. python获取当前文件夹下所有文件名【转】

    os 模块下有两个函数: os.walk() os.listdir() 1 # -*- coding: utf-8 -*- 2 3 import os 4 5 def file_name(file_d ...

  4. map json 字符串 对象之间的相互转化

    1.对象与字符串之间的互转 将对象转换成为字符串 String str = JSON.toJSONString(infoDo); 字符串转换成为对象 InfoDo infoDo = JSON.pars ...

  5. Problem 6 二分

    $des$有 $n$ 个物品,第 $i$ 个物品有两个属性 $k_i, b_i$ ,表示它在时刻 $x$ 的价值为 $k_i \times x + b_i$ .当前处于时刻 $0$ ,你可以选择不超过 ...

  6. P1894 [USACO4.2]完美的牛栏The Perfect Stall

    题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在 ...

  7. AtCoder Grand Contest 039 题解

    传送门 \(A\) 首先只有一串的情况下,遇到相同的肯定是改后面那一个最优,然后两串的话可能要分奇偶讨论一下 //quming #include<bits/stdc++.h> #defin ...

  8. Mac laravel: command not found

    如果用的oh-my-zsh 安装laravel 提示找不到.可以试试下面的 export PATH=$HOME/bin:/usr/local/bin:~/.composer/vendor/bin:$P ...

  9. java学习笔记(3)数据类型、源码、反码、补码、精度损失、基本数据类型互相转换

    关于java中的数据类型: 1.数据类型的作用是什么? 程序当中有很多数据,每一个数据都是有相关类型的,不同数据类型的数据占用的空间大小不同. 数据类型的作用是指导java虚拟机(JVM)在运行程序的 ...

  10. Redis哨兵日志说明

    一.说明