安全相关的代码和业务逻辑相关的代码实际上是在一个应用里面的,在这个应用里面,我们需要去,这个应用本身的处理逻辑里面需要去处理令牌和用户信息之间的转换。

然后我们需要去知道认证服务器的地址,这些都是耦合。

虽然我们把server.resource这里面的代码提炼成一个公用的jar包

把这些clientId和ClientSecret这些做成配置。然后让各个应用去依赖这个jar包,写不同的配置来实现这样的效果。但实际上本质是没变的。它的安全处理逻辑和你的业务逻辑仍然是在一个应用里面的。在一个应用里面,这就是一种耦合。我们之前说过在微服务环境下解耦是价值最大的一件事。

那么什么叫做安全处理和业务逻辑耦合呢???
举个例子,以为大家刚开始接触这个东西,用的是一个比较简单的获取令牌的方式,验令牌的时候也需要验证服务器,随着我们的规模扩大,我们需要一种新的认证方式。,或者说比如我的令牌是存在数据库的 可能以后会改成jwt或者其他的。或者我一开始下用的jwt,后来jwt有安全漏洞需要升级,不管是前面说的那种情况,只要你的安全相关的逻辑发生了变化,你就要升级你提炼出去的那个jar包,你要告诉所有的微服务的团队,你们要升级你们的安全的扎包,这就意味着这些开发微服务的团队在自己业务没有变化的情况下,他要因为你安全处理这方面的逻辑变化,而重新部署,可能还要改相应的配置或者代码等等一些东西。这个在一个比较复杂的微服务环境里面。一些互联网企业可能有几百上千甚至上万的微服务是不可接受的。因为影响面太大了。我们说安全处理和业务逻辑是耦合的,一旦有变化,影响面会非常大。

二是随着业务节点的增加认证服务的压力变大。我们这里验证token实际上是有一个http的请求连接过去的。当然我们可以通过连接池啊之类的技术来限制这个链接的数量,来控制服务器的压力。但是你的微服务本身它是不断的变化的。比如他原来是10个服务,可能过两天,随着业务的发展,10个服务拆成10个服务,或者拆成50个服务。某些服务在某些场景下它也会做去做扩充,比如说明天要大促,那你所有的节点,尤其是关键业务的节点。要部署的节点的数量要加倍。在这样一个场景下的,你的服务器的数量,一直在增长增长。在某些情况下还会快速增长,比如说某些大促的活动。这时候可能你原来能撑住的服务器的压力,因为你的微服务去增长去扩充容,结果他们连过来的连接数,超出了你认证服务器所能承受的连接数,把你认证服务器压死了。把你认证服务器链接都占满了。导致你的认证服务器不可用,然后所有需要依赖认证服务器的做的这些事情,全都不能做了整个都崩掉了。这也是一个在微服务环境下,一个很大的风险。

最后一个就是 多个服务同时暴露,增加了外部访问的复杂性,

从图上可以看到我们的客户端应用和我们的服务是直接打交道的。如果我这是几十个服务,每个服务都有自己的ip,或者说有自己的域名,那么对于我的客户端应用来说,我要访问访问订单服务,要访问这个服务、那个服务,对于我的客户端来说,我要记很多的东西。这就是增加了外部访问的复杂性。

网关

由网关来解决上面的这些问题。所有安全处理的逻辑全都放在网关上面来了。在订单服务里面不再有和安全处理相关的逻辑,它里面就只有业务逻辑。这个令牌怎么拿到,然后这个令牌是不是有效,全都在网关这里来做判断,一旦过了在订单服务这里只执行订单相关的业务逻辑,

网管的扩缩容比微服务的频率要小的多。
对个微服务现在只要 记住一个网关的地址,所有的请求和交互都是和网关交互,网关知道这些微服务在哪。
应用只知道客户端应用,

网关的搭建


原来都拷贝进来。

先把oauth2的依赖去掉。

先把网关搭建起来,让客户端应用只访问网关就可以访问到认证服务器和微服务。注意的一点,认证服务器也是要放在网关后面的。

添加网关zuul的引用


建启动类

加上@EnbaleZuulProxy它就是一个网关了。

那么代码就写完了。

配置

网关没有什么业务逻辑,主要地方就是在配置,通用的已经被封装好了。

首先来配置一下转发的逻辑,路由 路由后面是一个Map,表示可以有多个。

首先是要转发token ,转发给9090端口

order的转发

网关自己跑在9070的端口上。

敏感头

设置为空表示没有任何的头对我来说是敏感头。也就是说 头里的任何信息都往后转发。这样的话,服务才能通。

如果不设置敏感头的话,这个Authorization是转发不过去的。

启动网关服务


认证服务器启动起来。

订单服务 启动起来。

发送到localhost:9070/token这个路径下 后面的路径 oauth/token才是认证服务的路径。

200就说明转发成功了。

拿这个token再来调用一下创建订单的服务。


成功

结束

Spring cloud微服务安全实战-4-8Zuul网关安全开发(一)的更多相关文章

  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-9Zuul网关安全开发(二)

    把在微服务里面写的安全的相关逻辑挪到网关里面来.这样把安全逻辑和业务逻辑解耦开.那么这些问题就都解决了. 先来看下之前的安全的代码,首先在之类做了认证,认证服务器去认证,拿这个token去换用户信息. ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. oracle删除重复数据,只保留一条

    比如,某个表要按照id和name重复,就算重复数据 delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,n ...

  2. CQOI2016 不同的最小割 (最小割树模板)(等价流树的Gusfield构造算法)

    题目 最小割树模板 算法详解及证明见: 2016年国家队候选队员论文 <浅谈无向图最小割问题的一些算法及应用--绍兴一中 王文涛> 3.2节 CODE #include <bits/ ...

  3. LeetCode 364. Nested List Weight Sum II

    原题链接在这里:https://leetcode.com/problems/nested-list-weight-sum-ii/description/ 题目: Given a nested list ...

  4. 洛谷 P1950 长方形_NOI导刊2009提高(2) 题解

    P1950 长方形_NOI导刊2009提高(2) 题目描述 小明今天突发奇想,想从一张用过的纸中剪出一个长方形. 为了简化问题,小明做出如下规定: (1)这张纸的长宽分别为n,m.小明讲这张纸看成是由 ...

  5. spark,hadoop集群安装注意

    安装步骤严格参看厦门大学数据实验室教程 Spark 2.0分布式集群环境搭建(Python版) 安装Hadoop并搭建好Hadoop集群环境 遇到的问题 1.ubuntu 安装后升级.python是3 ...

  6. 【一起来烧脑】读懂Promise知识体系

    知识体系 Promise基础语法,如何处理错误,简单介绍异步函数 内容 错误处理的两种方式: reject('错误信息').then(null, message => {}) throw new ...

  7. 如何解决金蝶IKernel.exe报错 Windows Installer 错误 重新安装、无法卸载

    如何解决金蝶IKernel.exe报错 Windows Installer 错误 金蝶这个小婊子,就是这么贱. 卸载了高版本的,再安装低版本就不能安装上,死活都不能安装. 请手动启动一下Install ...

  8. 如何用elasticsearch构架亿级数据采集系统(第1集:非生产环境windows安装篇)

    (一)做啥的? 基于Elasticsearch,可以为实现,大数据量(亿级)的实时统计查询的方案设计,提供底层数据框架. 本小节jacky会在非生产环境下,在 window 系统下,给大家分享着部分的 ...

  9. 任意模数FFT

    任意模数FFT 这是一个神奇的魔法,但是和往常一样,在这之前,先 \(\texttt{orz}\ \color{orange}{\texttt{matthew99}}\) 问题描述 给定 2 个多项式 ...

  10. DM当中用文本输入点【转载】

    摘自<ANSYS 13.0 Workbench数值模拟技术> 通过XYZ坐标的文本文件创建3D曲线,文本需要满足一定的格式,格式化文本中,#表示此行是注释,忽略空行,数据行包括5个数据域, ...