本节开始讲认证相关的东西.注意事项,出现问题的对应的解决方案. 先写用户注册的服务,注册一些用户信息进去.注册也是我们安全体系的一部分 注册 UserController里面的create方法 先修改实体类,加上username和password 因为我们已经在配置文件内配置了generate-ddl为true,启动的时候jpa会自动把这两个属性加到数据库里,这样就不用我们自己手动去数据库里加属性. 设置主键的策略,这里设置的是根据当前数据库的类型策略,例如当前是mysql数据库,那么就会按照m…
首先要保证你的服务是可用的,其中一个重要的手段就是流控.就是流量控制.比如我的系统每秒只能处理500个请求,那么多余的请求就拒绝掉.这样我的系统不会被压死 实际的开发中,所要面对的流控场景实际是非常复杂的,在负载均衡上做,反向代理上做,或者自己写代码去做也是可以的.. 负载均衡和反向代理一般是针对集群的. 为什么要做流控: 1.保证系统的可用性,不要被大流量把系统压死,如果你的服务不可用,做什么都没有意义了. 2.流控一定要做在认证审计授权这些安全机制的前面.因为你的认证审计授权都是要消耗系统资…
基于Http协议的认证方式有很多.本节我们只讲一个最简单的HttpBasic认证.聪明就可以看出来,这是一个最基础的认证,好处是简单方便,所有的主流浏览器都支持,问题就是并不是非常安全的,但是帮我们大家理解认证这个概念是足够的. 首先要对认证信息做Base64的加密,加密之前要把这两个信息组合起来.用户名冒号密码组合成这样一个字符串.然后拿这个字符串做Base64的字符串的加密.并生成一个字符串. 把生成的串放到http请求的 请求头里面.带个前缀 Basic +空格 + 加密后的字符串. 开始…
Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课程导学 Spring Cloud微服务安全实战- 2-1 环境安装 Spring cloud微服务安全实战-3-1 API安全 常见的安全机制 Spring cloud微服务安全实战-3-2 第一个API及注入攻击防护 Spring cloud微服务安全实战-3-3 API安全机制之流控 Sprin…
很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的间隔,今天第二本<Spring Cloud微服务 入门 实战与进阶>也出版了. 去年出版的<Spring Cloud微服务:全栈技术与案例解析>一书,虽然写的不好,但是得到了大家的支持以及反馈,基于大家的反馈,重新进行了更正和改进. 基于比较稳定的 Spring Cloud Finch…
一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介:  二.最终形成的架构图  三.章节目录 第1章 课程导学 对整个课程的内容做一个简要的介绍,包括章节的安排,使用的主要技术栈,实战案例的介绍以及前置知识的介绍等内容. 1-1 课程导学 第2章 环境搭建 开发工具的介绍及安装,介绍项目代码结构并搭建,基本的依赖和参数设置. 2-1 环境安装 第3章 API安全 从简单的API场…
上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后,才会在前边加一个过滤器去验令牌(配置@EnableResourceServer 配置类) 2,要让他知道自己是什么资源服务器(配置资源服务器ID) 3,配置去哪里验令牌,怎么验令牌,要带什么信息去验 (配置@EnableWebSecurity 配置TokenServices,配置Authentica…
实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apac…
课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务场景,解决上述三大问题痛点,并结合实际给出相应解决方案.帮助大家形成对安全问题的系统性思考,实战开发一套可在中小公司落地的完整的安全方案. 教程目标明细: 技术要点全解析,覆盖微服务安全方方面面 适合人群 希望对微服务安全形成系统认识搭建一套完整落地方案的开发者 技术储备要求 Java Web开发基…
阿里2018年开源的. 简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉.保证服务高可用. 流控 先从最简单的场景来入手. 1.引用一个依赖, 2,声明一个资源. 3.声明一个规则 注意依赖是加在你的微服务上的,每一个微服务都要加一个sentinel的依赖. maven上搜索 声明资源 声明资源 就是你要保护的程序,或者是你要进行流控的那段逻辑. 最简单的方式就是写一段代码. Entry注意是alibaba.csp包下的 现在在创建订单的,所以这里起的名字就叫做createOrde…
授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的执行之后可以用注解来插入一些方法安全的相关的一些表达式. 这样orderController里面的注解就会生效了 启动测试 认证服务器. 网关 orderAPI 申请一个新的令牌 复制生成的这个令牌. 去调用创建订单的方法 收到一额403 就是不允许访问. 说明我们这个注解是生效的,因为我们发出的令…
首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递令牌.让你不用去写额外的代码 服务器端的改造 看一下认证服务器配置的这个类.这里有个tokenStore,就是令牌的存储器.现在用的是jdbc的TokenStore,令牌是存在数据库里的 我们new  一个jwtTokenStore它 需要一个参数jwtTokenEnhancer 需要set一个ke…
授权模式改造成了Authorization code完成了改造的同时也实现了SSO.微服务环境下的前后端分离的单点登陆. 把admin的服务重启.刷新页面 并没有让我去登陆,直接就进入了首页. order的API控制台 只要你在认证服务器上的session没过期.认证服务器就知道你是谁,他就不会让你输入用户名密码了.直接跳回到客户端应用. 一共有三个有效期. 退出操作 退出的时候.现在前端服务器清空session,认证服务器也需要清空session 在前端服务器退出后,再跳转到认证服务器执行退出…
把在微服务里面写的安全的相关逻辑挪到网关里面来.这样把安全逻辑和业务逻辑解耦开.那么这些问题就都解决了. 先来看下之前的安全的代码,首先在之类做了认证,认证服务器去认证,拿这个token去换用户信息. 认证完成后,又在这里做了个简单的授权,盘点当前的用户是不是有读权限和 写权限. 在这里还根据resourceId有一个简单的权限控制,就是我的令牌只能访问哪些resourceServer 之前基本上做的就是认证和授权,在网关上,所有的请求都要走网关转到这个微服务上.所以在网关上不光要做认证和授权,…
现在有了认证服务器,也配置了资源服务器.也根据OAuth协议,基于令牌认证的授权也跑通了.基本的概念也有了简单的理解. 往下深入之前,有几个点,还需要说一下 使用scopes来控制权限,scopes可以理解为之前的ACL 第三章的时候自己写的ACL来控制的读写权限.在OAuth协议里面用scopes来实现ACL的权限控制,两方面,首先在服务器这一端,可以针对不同的应用发出去不同权限的令牌, . 比如针对oderApp可以有读权限,也可以有写的权限. 针对orderService发出去的就只有re…
整体架构 这个图适合中小公司.麻雀虽小 五脏俱全.微服务架构所需要做的事在这个图里基本都有了. 绿色的不讲,主要讲的是这三块(橘黄色的).后面的和运维相关,会讲,不会讲的太深 订单服务 首先来写一个订单服务 从user的项目 复制依赖到order里面 复制过来了 增加starter-web的依赖 创建包 SpringBoot的启动类也复制过来,改个名字叫做OrderApi 新建order包 创建OrderInfo 新建OrderController 写一个创建订单的方法 创建价格服务 用来查询商…
这个图适用于中小公司的微服务架构 微服务:SpringBoot 写的Rest服务 服务注册与发现:微服务所必备的.每个微服务都会到上边去注册.不管是微服务之间的调用,还是服务网关到微服务的转发,都是通过服务注册和发现拿到服务的信息,来进行服务的调用或转发. 配置中心:统一管理配置的地方. 服务网关:所有外部请求的入口.微服务不会直接向外暴露,都是通过服务网关来进行转发. 安全中心:整个微服务的认证授权. 熔断限流:统一的管理微服务的限流.熔断.降级等.. 数据总线:左边大块里发生的所有事情,都会…
  第四章  网关安全 这一章从简单的API的场景过渡到复杂的微服务的场景 4.1 概述 微服务安全面临的挑战:介绍中小企业的一个微服务架构,相比第三章的单体应用的简单的API所面临的哪些挑战 OAuth2协议与微服务安全:介绍OAuth2中的各个角色,以及相互之间的关系,介绍具体的代码实现 微服务网关安全:搭建网关,安全中心,两个微服务,怎么将安全从微服务中解耦出来放到网关上,与OAuth协议联系起来解决微服务安全面临的新的挑战. 4.2 微服务安全面临的挑战  更多的入口点,更高的安全风险…
本章讲解,在不考虑微服务,只考虑一个简单的API ,如何保证这个API的安全? 三个问题: 1,什么是API ? 2,API安全的要素有哪些? 3,API安全基本机制 一.什么是API 百度百科:API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定. [1]  目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节. 通俗的讲:API就是你为客服提…
这两年微服务是一个很火的话题 .在java语言的体系里,现在最火的就是SpringCloud. 本系列文章主要不是讲:怎么使用SpringSpringCloud组件搭建一个微服务的体系,如服务的认证注册.配置中心.网关等微服务相关的一些组件,将他们拼在一起组成一个可以用的微服务的架构. 其实微服务不光有这些内容,还有很多其他的东西,如领域模型怎么来设计的,服务是怎么拆分,将单体变为微服务的架构,以及微服务的安全体系是怎么控制的,等等. 本系列文章主要说的是:基于SpringCloud的微服务的安…
总结 首先讲了api的安全.安全常见的风险.安全措施.然后我们把简单的api演化成一个这种微服务的架构. 首先讲了在网关上可以做哪些安全的措施.然后讲了如何搭建一个安全中心,也就是认证服务器,包括一些权限的服务,怎么把他组织起来,编程一个安全中心,然后,通过安全中心提供统一的身份认证和权限的管理. 然后讲了微服务之间的安全,jwt和统一的熔断限流.阿里的sentinel.这些组件加起来,加上微服务常用的服务注册与发现,以及配置中心 这样一个架构,在中小型公司里面,是可以落地的一个微服务架构.包含…
日志信息可以放到kafka,像指标监控就可以从kafka里面拿出日志来,分析日志里面的东西,把日志里面的一些信息变成数字,比如某个关键字出现了多少次,这样的信息同样去做监控,做报警. 调用链监控也是和日志系统可以打通的.可以把某一个请求的TransactionId从日志请求里面把这个请求所有的日志都拉出来. 这三个系统可以把你的微服务整个的监控起来.因为时间关系都没有讲的特别深,只是把常见的场景讲了.这里面其实还是有很多强大的功能在里面. 这三个东西用好了,可以让你的服务的安全性.监控报警.排查…
微服务的最后一个组件, 调用链监控,一个请求进来以后,经过N多个微服务,例如a调用了b.b又调用了c,那么在这个过程中看到,整个的调用的链路,然后每一段调用所耗费的时间,帮你去分析你的系统如果出现瓶颈以后,瓶颈到底在什么地方. pinpoint 点击看一下在线的demo 提供的一些应用的列表 选择order.这张图就是order这个服务的调用图. 出去调用的一层,分别调用了product和payment还有mysql数据库 outbound选择两层的话 图就会刷新.每一个箭头上都有数字,数字就是…
前面的章节都是围绕这微服务的安全在讲一些东西,包括微服务本身api的安全.网关的安全.怎么去做安全中心,包括认证服务器,权限的服务.权限的设计,怎么来实现SSO.然后sentinel来实现统一的熔断,限流,这些都是和安全相关的知识点.前面讲的这些东西都是保证你的服务不出问题的.但是一个永远不出现问题的服务是不可能存在的,这时候我们就需要一些可见性的保证,让我来及时的发现问题,然后去排查这些问题. 本节会讲三套系统分别对应调用链监控.指标监控.日志监控 各自的特点, Metrics:所有可以用数字…
规则的持久化问题.现在的规则都是在内存里的,我们要写一些代码来编一些规则.启动以后规则在内存里了.如果你配置里面有sentinel的dashboard,有流量经过客户端的时候,它会把规则同步给Dashboard,同样的sentinel的dashboard页面上增加或者修改规则后.sentinel也会把规则推给相应的客户端, 我们之前在配置文件内配置了这个 sentinel的port.sentinel的客户端还会再起一个服务.一但dashboard去改这个配置的时候,它就会调用客户端的服务把响应的…
这一章来讲一下,微服务之间的通讯安全. 当前这个架构还存在的问题 在网关上做限流还是有一些问题的.例如我的订单服务限流是100,库存服务限流也是100.但是我的订单服务会调用我的库存服务.那么在网关这,给订单转100个请求,库存转100个请求,最后订单又调了库存,库存会同时受到200个请求.这时候库存服务可能就挂掉了. 这是在网关这里做限流,可能会出现的一些问题. 第二个问题就是身份认证. 效率低,在网关上每一个请求都要去认证服务器验令牌.这样就会导致多一次网络请求的开销.同时我的认证服务器压力…
本节来实现一个登陆的效果. 需要一个登陆前的页面和登陆后的页面. 直接粘贴过来的代码 这是一个和后台的绑定 后台要有个autenticated的对象来实现绑定,ts内我们定义这个autenticated变量.当autenticated是false的时候,这个hidden就不触发. 方括号绑的是属性,圆括号绑的是方法. ts内我们要定义一个login的方法 双向绑定 后端定义credentials 后端的数据有值了的话.前端的文本框内也会显示上值 为了实现双向绑定还需要引入一些依赖. FormMo…
基于微服务架构,前后端分离实现SSO 前后端分离到底是个什么样的架构. 中间不是用Nginx而是用Node JS. node.js在服务端的页面渲染,这样搜索引擎爬虫 来爬的时候 爬的就是html页面. 我们 所说的前端不光是浏览器 ,还包括webServer.后端只负责提供数据 把 客户端 ,做成前端应用的架子 先把基本的架子打起来.实现基本的认证. 结束…
限流,有个现成的开源项目可以帮助我们来做网关上的限流 用最新的这个版本 在pom.xml加入引用. 在限流的过程中需要存一些信息,可以存在数据库里 也可以存在redis里.这里我们演示存到数据库里 比如说配置1分钟内只能有100个请求.那么当前已经有多少个请求过去了 ,这个是需要记下来的,下一个请求来了 ,把保存的信息再拿出来,然后再去看当前这个请求能不能过.所以需要有存储.在生产上还是用redis.redis的并发能力比数据库要高很多. 这里为了看到数据用数据库 数据库相关的配置复制过来. 改…
安全相关的代码和业务逻辑相关的代码实际上是在一个应用里面的,在这个应用里面,我们需要去,这个应用本身的处理逻辑里面需要去处理令牌和用户信息之间的转换. 然后我们需要去知道认证服务器的地址,这些都是耦合. 虽然我们把server.resource这里面的代码提炼成一个公用的jar包 把这些clientId和ClientSecret这些做成配置.然后让各个应用去依赖这个jar包,写不同的配置来实现这样的效果.但实际上本质是没变的.它的安全处理逻辑和你的业务逻辑仍然是在一个应用里面的.在一个应用里面,…