soul网关-4-sign插件签名认证
一个网关的下游是多个业务线,如果这些业务线都有鉴权的需求,那么可以使用网关的鉴权功能,没必要每个业务线都自己实现一套鉴权的代码。除非是与业务强相关的鉴权,是那种不具有普适性的需求。
soul网关的鉴权功能是在sign插件模块,作为一个插件,是可以启用或者不启用的。我们来看下soul网关sign模块的大致功能。
1.首先将环境启动一下,启动soul-admin管理后台、启动网关soul-bootstrap、启动示例的springboot项目soul-example-http
2.在admin管理后台的sign插件模块,添加selector和rule。
假设我们是要对order/findById
接口鉴权,那么可以创建相应的selector和rule如下图所示。
创建的时候要注意,selector或者rule的name不能与已有的重名,否则会创建不成功。
因为看soul-admin/src/main/resources/META-INF/schema.sql这个文件,这个是soul-admin启动的时候会执行的一个脚本,看里面的表结构,selector和rule表都是以name为unique key的。
因为我们在第一步启动示例的springboot项目soul-example-http的时候,已经在divide插件里面向selector和rule表分别插入了名为/http
和/http/order/findById
的selector和name,所以我们在sign插件里创建selector和rule的时候,不能与已经存在的重名。
由selector和rule不能重名,想到soul网关是使用Map把数据缓存在内存的,而Map的key就是name。
3.在admin管理后台把sign插件的状态置为”开启“
4.在admin管理后台,为用户生成AK/SK
下面学习一下sign插件的鉴权逻辑。
首先看一下官方文档里面对于sign插件的介绍。
先看一下签名算法,看了一下是比较简单的将key自然排序后拼接最后MD5。
在第二篇笔记里面已经梳理过了,sign是插件链的第一个插件,我们去SignPlugin
类里面看一下具体逻辑
看一下sign插件的签名认证过程:
- 首先是会进入SignPlugin的父类
AbstractSoulPlugin
的execute
方法- 判断插件是否安装
- 判断插件是否开启
- 判断插件是否在内存中有对应的缓存数据
- 判断插件缓存数据中是否有selector列表,以及是否有selector可以匹配该请求url
- 判断缓存的selector数据中是否有rule列表,以及是否有rule可以匹配该请求url
- 如果以上校验都通过,则会执行
SignPlugin
的doExecute
方法,会在里面进行具体的签名认证- 判断sign插件在内存中有对应的缓存数据,以及插件是否已开启
- 判断请求的header中是否包含必须的timestamp、appKey、sign等参数
- 判断请求header中的timestamp(及请求发出的时间)与当前时间比,是否在5分钟内。否则,鉴权失败
- 判断内存中是否存在缓存的
AppAuthData
对象,即刚刚我们的准备工作第4步设置的东西 - 判断当前请求的path是否在第4步设置的path里面
- 将代码生成的sign与请求header中的sign比较,判断是否相等
总体看来,soul网关里面的签名认证部分还是比较简单易懂的。soul网关还支持自定义签名插件算法与验证。
soul网关-4-sign插件签名认证相关推荐
- soul网关监控插件的使用
本篇主要讲解soul网关插件监控插件的使用 流程图: 技术方案 监控插件,使用influxdb来进行存储,使用前请你确保你正确的安装了influxdb.采用异步的disruptor进行保存.监控网关的 ...
- Soul网关进阶使用
Soul网关进阶使用 目标 dubbo集成Soul网关 springcloud集成Soul网关 总结 Alibaba Dubbo + SpringBoot用户集成Soul网关 Soul网关加入dubb ...
- Soul网关源码阅读19-解析sign插件
sign插件是 soul网关自带的,用来对请求进行签名认证的插件,下面来解析一下sign插件. 一.环境搭建 soul-admin 开启 sign 插件:系统管理 --> 插件管理 soul-b ...
- Soul网关源码阅读(九)插件配置加载初探
Soul网关源码阅读(九)插件配置加载初探 简介 今日来探索一下插件的初始化,及相关的配置的加载 源码Debug 插件初始化 首先来到我们非常熟悉的插件链调用的类: SoulWebHa ...
- soul网关-2-divide插件
先来设想一下,网关如果收到了一个请求http://xxx.com/openapi/appname/order/findById?id=3,那么怎么将请求转发给对应的业务? 可以想象一下大概是这几个步骤 ...
- Soul网关源码阅读(十)自定义简单插件编写
Soul网关源码阅读(十)自定义简单插件编写 简介 综合前面所分析的插件处理流程相关知识,此次我们来编写自定义的插件:统计请求在插件链中的经历时长 编写准备 首先我们先探究一下,一个P ...
- Soul网关源码阅读(七)限流插件初探
Soul网关源码阅读(七)限流插件初探 简介 前面的文章中对处理流程探索的差不多了,今天来探索下限流插件:resilience4j 示例运行 环境配置 启动下MySQL和redis d ...
- Soul源码解析(16)-Soul网关熔断插件使用及源码解读
一.目标 1.使用Soul网关熔断插件: 2.解读熔断插件关键代码: 二.内容 2.1 背景 熔断:在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时 ...
- Java—通过sign签名认证实现安全的开放接口API
关注微信公众号:CodingTechWork,一起学习进步. 文章目录 引言 API接口 timestamp保证唯一性 shell生成timestamp java生成timestamp模板 sign签 ...
最新文章
- php7 mongodb 分组 排序 查询
- python中文编码-彻底弄懂python编码
- 【CodeForces - 1082B】Vova and Trophies (贪心模拟,暴力)
- memcached的java客户端_Memcached Java客户端
- 用java程序设计一个快递_Java编程语言的优点快递
- 爬虫异步错误:raise RuntimeError(‘Event loop is closed‘) RuntimeError: Event loop is closed的解决办法
- oppo r9s 解bl锁,刷入第三方recovery
- DB2 SQLCODE常见错误代码
- ssget 用法详解
- 计算机的主要元器件介绍,计算机基础电子元器件介绍
- 移动硬盘安装操作系统以win7为例子
- 全国计算机科学与技术讲师电话,计算机科学与技术学院
- c++中“箭头(-)”和“点号(.)”操作符的区别
- 『Reprint』GRADUAL
- 小鸡手柄或其他手柄导致的电脑无法熄屏休眠问题
- 贝勒大学计算机专业,贝勒大学计算机科学贝勒大学计算机科学.pdf
- 基于微信小程序的校园二手物品交易平台的设计与实现-计算机毕业设计源码+LW文档
- 为什么单个元素的元组要加上逗号?
- 生成SIN波形的一个小工具
- 转:没有深度思考,所有努力都是扯淡
热门文章
- Altium Designer PCB设计规则中英对照
- 网易考拉API,根据ID取产品详情 OneBound数据
- 终极网络电视王 v3.25 是什么
- sap清账使用反记账_【转】SAP反记账功能祥解
- 通过云效 CI/CD 实现微服务全链路灰度
- Zotero使用OneDrive云存储附件(OneDrive+Zotero)
- gamma矫正/gamma映射
- qcustomplot 峰值_QT 本程序可读取Yokogawa 光谱仪多个数据文件(CSV格式)并寻峰 - 下载 - 搜珍网...
- Java语言的跨平台性或Java语言为什么说可以跨平台运行
- macOS升级node