对于微服务网关来说,统一请求验证是一个比较重要和常用的功能,通过网关验证后台服务就无须关注请求验证;对于多语言平台的服务而言制定验证方式和变更验证配置都是一件比较繁琐和工作量大的事情。Bumblebee提供JWT验证插件,只需要简单配置即可让网关实现请求统一验证。

引用插件

Bumblebee中使用JWT需要引用两个插件,分别是Bumblebee.ConfigurationBumblebee.Jwt。加载启动后就可以通过管理工具进行插件配置.

            g = new Gateway();
g.HttpOptions(
o =>
{
o.Port = ;
o.LogToConsole = true;
o.LogLevel = BeetleX.EventArgs.LogType.Error;
});
g.Open();
g.LoadPlugin(
typeof(Bumblebee.Configuration.Management).Assembly,
typeof(Bumblebee.Jwt.JwtPlugin).Assembly
);

如果不想自己编写代码可以下载编译的运行包 Bumblebee1.0.6这个版本已经加入了JWT

插件管理

运行程序后进行配置管理工具的插件管理页面,可以看到JWT插件,默认是未启用。

数据库配置

Bumblebee.Jwt的使用需要用到数据库,主要用于接管登陆并生成Token用。插件默认支持三种数据库,分别是:mssql,mysqlpgsql.相关登陆信息表必须包括以下三个字段:_name(用户名),_role(角色)和_password(密码).mysql脚本如下:

CREATE TABLE `_users` (
`_name` varchar(50) NOT NULL,
`_password` varchar(45) DEFAULT NULL,
`_role` varchar(45) DEFAULT NULL,
PRIMARY KEY (`_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

JWT配置

插件使用需要进行配置,可以通过点击插件进入相关配置页面。

示例配置如下:

{
"Key": "ExxUqmeDKnAk1eMHV02ICJkwp82RsleM887yRnQS3Gg8OHCxWsLPlzCEAJActCo6y6Mae26JeGDFx7aYkeP7Efl6yh/d1q3XYRCdDLLGbz+kt3vR92H6s78P7JILNgZMiO6XoekKXfT2Qxle7Gyu/1d39NloKhqXgBdgzeobyyo=",
"MD5": false,
"DBType": "MYSQL",
"ConnectionString": "Server=192.168.2.19;Database=world;Uid=root;Pwd=123456;",
"VerifyPaths": [
"^/api.*"
],
"Table": "_users",
"TokenTimeOut": 200,
"RemoveHeaders": [
"Cookie"
],
"LoginMaxRps": 200
}
  • Key JWT处理密钥

  • MD5 是否要把密码转MD5再查询

  • DBType 数据类型,分别:MSSQL,MYSQL,PGSQL

  • ConnectionString 数据库连接字符串

  • VerifyPaths 需要验证的路径列表,正则表达式。

  • Table 用户表名称

  • TokenTimeOut 凭证超时时间,单位是分钟

  • RemoveHeaders转发时移走头列表

  • LoginMaxRps登陆限制,每秒允许并发数,如果设置成零则不限.使用中建议设置一个并发限制,毕竟这个操作涉及到数据库IO处理,容易被恶意调用损耗网关性能。

JWT相关访问接口

  • http://host/__system/jwt/login?name=henry&pwd=123456&cookie=true

   登陆获取Token访问Url,cookie参数表示返回Token并写入Cookie

  • http://host/__system/jwt/singout

   清除Cookie相应的Token信息.

请求Token配置

如果在调用登陆的时候写入了Cookie那在请求过程中不再需要配置相关Token信息.在其他调用方式下需要把返回的Token配置到请求头的Authorization上。

应用示例

直接下来用aspcore编写一个webapi服务然后用Bumblebee进行一个代理并设置安全控制访问。

    public class ApiController : Controller
{
// GET: /<controller>/
public IActionResult Index()
{
return new ContentResult { Content = $"{DateTime.Now}|name:{Request.Headers["jwt_user"]};role:{Request.Headers["jwt_role"]}" };
} public IActionResult Hello(string name)
{
return new ContentResult { Content = $"hello {name} {DateTime.Now}|name:{Request.Headers["jwt_user"]};role:{Request.Headers["jwt_role"]}" };
}
}

服务启动的地址是http://localhost:58387/,在网关配置相关路由

JWT验证关闭后可以正常访问服务

由于没有经过网关的验证,所以jwt_userjwt_role信息为空。如果开启JWT验证又会怎样呢?

下面是开启的运行结果

由于请求没有凭证信息,所以被网关拦截并返回了相应的错误。接下来先访问一下登陆接口并获取凭证http://localhost/__system/jwt/login?name=henry&pwd=123456&cookie=true,当凭证获取后就可以访问服务。

返回的结果可以正常获取jwt_userjwt_role信息,因为网关开启jwt后把相关登陆凭让写入到相关信息头传入到相应的服务中。

Bumblebee服务网关之统一请求验证的更多相关文章

  1. spring-cloud 学习四 服务网关

    API Gateway 服务网关在微服务中是一个很重要的组成部分,通过服务网关可以统一向外提供REST API,例如 / 映射到后端应用 /api/user 映射到 user service,  /a ...

  2. Bumblebee微服务网关的部署和扩展

    Bumblebee是.netcore下开源基于BeetleX.FastHttpApi扩展的HTTP微服务网关组件,它的主要作用是针对WebAPI集群服务作一个集中的转发和管理:作为应用网关它提供了应用 ...

  3. 服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)

    Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能: 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求. 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生成 ...

  4. Spring Cloud Zuul API服务网关之请求路由

    目录 一.Zuul 介绍 二.构建Spring Cloud Zuul网关 构建网关 请求路由 请求过滤 三.路由详解 一.Zuul 介绍 ​ 通过前几篇文章的介绍,我们了解了Spring Cloud ...

  5. 阿里云API网关(13)请求身份识别:客户端请求签名和服务网关请求签名

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  6. .net core中使用Bumblebee架设微服务网关

    Bumblebee是款基于.net core开发开源的http服务网关,经过最近版本的完善在功能足以满足作为微服务网关的需要.在微服务网关功能中它提供了应用服务负载,故障迁移,安全控制,监控跟踪和日志 ...

  7. 服务网关ZuulFilter过滤器--pre/post/error的用法(校验请求信息,获取路由后的请求/响应信息,处理服务网关异常)

    微服务中Zuul服务网关一共定义了四种类型的过滤器: pre:在请求被路由(转发)之前调用 route:在路由(请求)转发时被调用 error:服务网关发生异常时被调用 post:在路由(转发)请求后 ...

  8. api-gateway实践(03)新服务网关 - 网关请求拦截检查

    参考链接:http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html 一.为什么要拦截检查请求? 防止重放攻击.篡改重放,进行使用规格检查 ...

  9. 解决微服务网关Ocelot使用AddStoreOcelotConfigurationInConsul后请求404问题

    一个小插曲,最近研究 netcore 微服务网关,在使用AddStoreOcelotConfigurationInConsul将配置存到consul后,任何经过网关的请求都出现404,并且没有任何有用 ...

随机推荐

  1. Eclipse批量注释、批量缩进、批量取消缩进技巧

    1.批量注释:选中若干行,按"Ctrl"+"/" 2.批量缩进:选中若干行,按TAB 3.批量取消缩进:选中若干行,按SHIFT+TAB

  2. atcoder C - Snuke and Spells(模拟+思维)

    题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_c 题解:就是简单的模拟一下就行.看一下代码就能理解 #include <iostream& ...

  3. CodeM 资格赛 B 可乐 思维

      分析: 我们假设购买一种可乐p瓶,我们可以得到期望:p*(m/n*a[i]+(n-m)/n*b[i]),由这个式子我们可以看出唯一的变量是i,所以可以遍历i找出式子的最大值 #include &l ...

  4. Prometheus安装

    Prometheus安装 下载地址: https://prometheus.io/download/ 现在时间是: 2019.09.07 安装环境: Linux centos7 minimal 虚拟机 ...

  5. jQuery - 01. jQuery特点、如何使用jQuery、jQuery入口函数、jQuery和DOM对象的区别、jQuery选择器、

    this指的是原生js的DOM对象 .css(“”):只写一个值是取值,写俩值是赋值 window.onload   ===   $(document).ready(); $(“”):获取元素   标 ...

  6. web scraper 抓取数据并做简单数据分析

    其实 web scraper 说到底就是那点儿东西,所有的网站都是大同小异,但是都还不同.这也是好多同学总是遇到问题的原因.因为没有统一的模板可用,需要理解了 web scraper 的原理并且对目标 ...

  7. 当递归遇到synchronized

    面试题:有一个synchronized方法,加入该方法发生递归调用,会导致线程死锁码? 解析: 所谓递归函数就是自调用函数,在函数体内直接或间接的调用自己,即函数的嵌套是函数本身. 递归方式有两种:直 ...

  8. Fortify安全漏洞一般处理方法

    前段时间公司又一轮安全审查,要求对各项目进行安全扫描,排查漏洞并修复,手上有几个历史项目,要求在限定的时间内全部修复并提交安全报告,也不清楚之前是如何做的漏洞修复,这次使用工具扫描出来平均每个项目都还 ...

  9. 阿里雷卷:Reactive 基金会的成立将对开发方式带来哪些影响?

    作者 | 赵钰莹 近日,Linux 基金会宣布成立 Reactive 基金会.对于 Reactive,各位开发者应该并不陌生,尤其是 Node.js 开发者,但真正了解并意识到这件事情对开发方式带来的 ...

  10. 4、链栈的实现(java代码)

    1.链节点 public class Node<T> { public T data; public Node next; } 2.实现代码 public class Stack<T ...