Spring cloud微服务安全实战-4-8Zuul网关安全开发(一)
安全相关的代码和业务逻辑相关的代码实际上是在一个应用里面的,在这个应用里面,我们需要去,这个应用本身的处理逻辑里面需要去处理令牌和用户信息之间的转换。
然后我们需要去知道认证服务器的地址,这些都是耦合。
虽然我们把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网关安全开发(一)的更多相关文章
- 《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-9Zuul网关安全开发(二)
把在微服务里面写的安全的相关逻辑挪到网关里面来.这样把安全逻辑和业务逻辑解耦开.那么这些问题就都解决了. 先来看下之前的安全的代码,首先在之类做了认证,认证服务器去认证,拿这个token去换用户信息. ...
- 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生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...
随机推荐
- java中split函数参数特殊字符的处理(转义),如:"." 、"\"、"|"
内容介绍 本文主要介绍java中特殊字符做为split函数的参数,如:"." ."\"."|",双引号等,不能正确分隔源字符串的处理方法. ...
- php 文件包含函数
在实际开发中,常常需要把程序中的公用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可.这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利.在PHP中, 有require.re ...
- PHP流程控制之do...while循环的区别
do...while与while的语法结构基本一样,也是一个布尔型循环,功能也基本一样.大理石平台价格 基本语法规定如下: do { //代码块 } while (判断); do...while ...
- Apache Solr Velocity模板远程代码执行
更多内容,欢迎关注微信公众号:信Yang安全,期待与您相遇. 这里用的docker环境 很简单的 在这里不再介绍 本地搭建好环境然后访问8983端口 网页如下: 查下节点名称 同样名字可以访问http ...
- .Net Core WebApi实现跨域
.Net Core 需要引用一个包 Microsoft.AspNetCore.Cors 让接口实现跨域,需要配置两个地方. 一.Startup.cs 这里需要配置两个地方 public void C ...
- TPC-H 测试参考
https://github.com/digoal/pg_tpch ---明天以此为准 https://www.jianshu.com/p/83e670cf3ffb https://yq.aliyu ...
- WAMP 403 Forbidden禁止访问,别的电脑访问不了;
直接上图: 1:修改httpd.conf; deny from all 改成------ allow from all 重启服务就好了: 2:如果搜不到deny from all 就按照下面的方法来 ...
- 桥接模式:探索JDBC底层实现
一.目录概要 二.问题探究 需求:假设要设计一个电脑商场管理系统的某个模块设计,电脑分为品牌和类型两个纬度,我们应该怎么解决? 按照初学者的思路,利用继承就能简单粗暴的实现,那我们来看下这种思路的设计 ...
- Adobe Acrobat DC
DC: document cloud [云服务] 但是Adobe document cloud包括: Acrobat DC, Adobe sign, 以及Web和移动应用程序. 参考: https:/ ...
- pycharm通过pytest运行报错:No test were found 解决
今天写代码犯了一个不应该犯的小错误,通过记录下来便于查看 1.报错代码如下: platform win32 -- Python 3.7.3, pytest-4.0.2, py-1.8.0, plugg ...