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

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

虽然我们把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. 【Mac电脑】Burp 设置代理后提示“您的链接不是私密链接”的解决方案

    一.遇到的问题 通过Burp Proxy代理抓包时,遇到的如下情况: 二.解决问题 (1)基础介绍 HTTPS协议是为了数据传输安全的需要,在HTTP原有的基础上,加入了安全套接字层SSL协议,通过C ...

  2. Linux命令基础5-文件重定向

    文件描述符是和文件的输入.输出相关联的非负整数,Linux内核(kernel)利用文件描述符(file descriptor)来访问文件.打开现存文件或新建文件时,内核会返回一个文件描述符.读写文件也 ...

  3. python字符转数字

    print(float("260.01478420521632365364543423")) 260.0147842052163

  4. Hbase表结构

    1.Hbase表结构:可以看成map,里面有行键,行键是按照字母顺序排序.行键下面是列族,每个列族可以有不同数量的列甚至是没有列.每个列里面包含着不同时间版本的列的值. 行键:是按照字母的顺序排序的, ...

  5. postgresql Kill掉正在执行的SQL语句

    kill方式是杀掉进程,但是有时候需要取消相关SQL语句,采用以下方式 一.查看哪些SQL语句正在执行 语句如下:SELECT datname,procpid,query_start, current ...

  6. php大文件分块上传断点续传demo

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  7. 【HTML】解析原理

    标准的web前端工程师需要知道 ◎浏览器(或者相应播放器)的渲染/重绘原理 这我得加把劲了.我还真的说的不是很清楚,我就G下,结果不是很多,找到了有一个,就记下来了... 以下部分来自handawei ...

  8. 17、stage划分算法原理及DAGScheduler源码分析

    一.stage划分算法原理 1.图解 二.DAGScheduler源码分析 1. ###org.apache.spark/SparkContext.scala // 调用SparkContext,之前 ...

  9. 【一起来烧脑】读懂JQuery知识体系

    背景 在现在就业的过程中,会运用JQuery是你的加分项,那么什么是JQuery,嗯,jquery是JavaScript的函数库,是一种轻量级的JavaScript库,写得少,做的多,导致jQuery ...

  10. P3719 [AHOI2017初中组]rexp——递归模拟

    P3719 [AHOI2017初中组]rexp 没有什么算法的题做起来真不适应,这道题深深讽刺了我想用栈维护匹配括号个数的想法: 递归解决就行了: 时刻注意函数返回值是什么,边界条件是什么: #inc ...