一个网关的下游是多个业务线,如果这些业务线都有鉴权的需求,那么可以使用网关的鉴权功能,没必要每个业务线都自己实现一套鉴权的代码。除非是与业务强相关的鉴权,是那种不具有普适性的需求。

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的父类AbstractSoulPluginexecute方法

    • 判断插件是否安装
    • 判断插件是否开启
    • 判断插件是否在内存中有对应的缓存数据
    • 判断插件缓存数据中是否有selector列表,以及是否有selector可以匹配该请求url
    • 判断缓存的selector数据中是否有rule列表,以及是否有rule可以匹配该请求url
  • 如果以上校验都通过,则会执行SignPlugindoExecute方法,会在里面进行具体的签名认证
    • 判断sign插件在内存中有对应的缓存数据,以及插件是否已开启
    • 判断请求的header中是否包含必须的timestamp、appKey、sign等参数
    • 判断请求header中的timestamp(及请求发出的时间)与当前时间比,是否在5分钟内。否则,鉴权失败
    • 判断内存中是否存在缓存的AppAuthData对象,即刚刚我们的准备工作第4步设置的东西
    • 判断当前请求的path是否在第4步设置的path里面
    • 将代码生成的sign与请求header中的sign比较,判断是否相等

总体看来,soul网关里面的签名认证部分还是比较简单易懂的。soul网关还支持自定义签名插件算法与验证。

soul网关-4-sign插件签名认证相关推荐

  1. soul网关监控插件的使用

    本篇主要讲解soul网关插件监控插件的使用 流程图: 技术方案 监控插件,使用influxdb来进行存储,使用前请你确保你正确的安装了influxdb.采用异步的disruptor进行保存.监控网关的 ...

  2. Soul网关进阶使用

    Soul网关进阶使用 目标 dubbo集成Soul网关 springcloud集成Soul网关 总结 Alibaba Dubbo + SpringBoot用户集成Soul网关 Soul网关加入dubb ...

  3. Soul网关源码阅读19-解析sign插件

    sign插件是 soul网关自带的,用来对请求进行签名认证的插件,下面来解析一下sign插件. 一.环境搭建 soul-admin 开启 sign 插件:系统管理 --> 插件管理 soul-b ...

  4. Soul网关源码阅读(九)插件配置加载初探

    Soul网关源码阅读(九)插件配置加载初探 简介     今日来探索一下插件的初始化,及相关的配置的加载 源码Debug 插件初始化     首先来到我们非常熟悉的插件链调用的类: SoulWebHa ...

  5. soul网关-2-divide插件

    先来设想一下,网关如果收到了一个请求http://xxx.com/openapi/appname/order/findById?id=3,那么怎么将请求转发给对应的业务? 可以想象一下大概是这几个步骤 ...

  6. Soul网关源码阅读(十)自定义简单插件编写

    Soul网关源码阅读(十)自定义简单插件编写 简介     综合前面所分析的插件处理流程相关知识,此次我们来编写自定义的插件:统计请求在插件链中的经历时长 编写准备     首先我们先探究一下,一个P ...

  7. Soul网关源码阅读(七)限流插件初探

    Soul网关源码阅读(七)限流插件初探 简介     前面的文章中对处理流程探索的差不多了,今天来探索下限流插件:resilience4j 示例运行 环境配置     启动下MySQL和redis d ...

  8. Soul源码解析(16)-Soul网关熔断插件使用及源码解读

    一.目标 1.使用Soul网关熔断插件: 2.解读熔断插件关键代码: 二.内容 2.1 背景 熔断:在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时 ...

  9. Java—通过sign签名认证实现安全的开放接口API

    关注微信公众号:CodingTechWork,一起学习进步. 文章目录 引言 API接口 timestamp保证唯一性 shell生成timestamp java生成timestamp模板 sign签 ...

最新文章

  1. php7 mongodb 分组 排序 查询
  2. python中文编码-彻底弄懂python编码
  3. 【CodeForces - 1082B】Vova and Trophies (贪心模拟,暴力)
  4. memcached的java客户端_Memcached Java客户端
  5. 用java程序设计一个快递_Java编程语言的优点快递
  6. 爬虫异步错误:raise RuntimeError(‘Event loop is closed‘) RuntimeError: Event loop is closed的解决办法
  7. oppo r9s 解bl锁,刷入第三方recovery
  8. DB2 SQLCODE常见错误代码
  9. ssget 用法详解
  10. 计算机的主要元器件介绍,计算机基础电子元器件介绍
  11. 移动硬盘安装操作系统以win7为例子
  12. 全国计算机科学与技术讲师电话,计算机科学与技术学院
  13. c++中“箭头(-)”和“点号(.)”操作符的区别
  14. 『Reprint』GRADUAL
  15. 小鸡手柄或其他手柄导致的电脑无法熄屏休眠问题
  16. 贝勒大学计算机专业,贝勒大学计算机科学贝勒大学计算机科学.pdf
  17. 基于微信小程序的校园二手物品交易平台的设计与实现-计算机毕业设计源码+LW文档
  18. 为什么单个元素的元组要加上逗号?
  19. 生成SIN波形的一个小工具
  20. 转:没有深度思考,所有努力都是扯淡

热门文章

  1. Altium Designer PCB设计规则中英对照
  2. 网易考拉API,根据ID取产品详情 OneBound数据
  3. 终极网络电视王 v3.25 是什么
  4. sap清账使用反记账_【转】SAP反记账功能祥解
  5. 通过云效 CI/CD 实现微服务全链路灰度
  6. Zotero使用OneDrive云存储附件(OneDrive+Zotero)
  7. gamma矫正/gamma映射
  8. qcustomplot 峰值_QT 本程序可读取Yokogawa 光谱仪多个数据文件(CSV格式)并寻峰 - 下载 - 搜珍网...
  9. Java语言的跨平台性或Java语言为什么说可以跨平台运行
  10. macOS升级node