Bumblebee服务网关之统一请求验证
对于微服务网关来说,统一请求验证是一个比较重要和常用的功能,通过网关验证后台服务就无须关注请求验证;对于多语言平台的服务而言制定验证方式和变更验证配置都是一件比较繁琐和工作量大的事情。Bumblebee提供JWT验证插件,只需要简单配置即可让网关实现请求统一验证。
引用插件
Bumblebee中使用JWT需要引用两个插件,分别是Bumblebee.Configuration和Bumblebee.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,mysql和pgsql.相关登陆信息表必须包括以下三个字段:_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
}
KeyJWT处理密钥MD5是否要把密码转MD5再查询DBType数据类型,分别:MSSQL,MYSQL,PGSQLConnectionString数据库连接字符串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_user和jwt_role信息为空。如果开启JWT验证又会怎样呢?

下面是开启的运行结果

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

返回的结果可以正常获取jwt_user和jwt_role信息,因为网关开启jwt后把相关登陆凭让写入到相关信息头传入到相应的服务中。
Bumblebee服务网关之统一请求验证的更多相关文章
- spring-cloud 学习四 服务网关
API Gateway 服务网关在微服务中是一个很重要的组成部分,通过服务网关可以统一向外提供REST API,例如 / 映射到后端应用 /api/user 映射到 user service, /a ...
- Bumblebee微服务网关的部署和扩展
Bumblebee是.netcore下开源基于BeetleX.FastHttpApi扩展的HTTP微服务网关组件,它的主要作用是针对WebAPI集群服务作一个集中的转发和管理:作为应用网关它提供了应用 ...
- 服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)
Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能: 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求. 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生成 ...
- Spring Cloud Zuul API服务网关之请求路由
目录 一.Zuul 介绍 二.构建Spring Cloud Zuul网关 构建网关 请求路由 请求过滤 三.路由详解 一.Zuul 介绍 通过前几篇文章的介绍,我们了解了Spring Cloud ...
- 阿里云API网关(13)请求身份识别:客户端请求签名和服务网关请求签名
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- .net core中使用Bumblebee架设微服务网关
Bumblebee是款基于.net core开发开源的http服务网关,经过最近版本的完善在功能足以满足作为微服务网关的需要.在微服务网关功能中它提供了应用服务负载,故障迁移,安全控制,监控跟踪和日志 ...
- 服务网关ZuulFilter过滤器--pre/post/error的用法(校验请求信息,获取路由后的请求/响应信息,处理服务网关异常)
微服务中Zuul服务网关一共定义了四种类型的过滤器: pre:在请求被路由(转发)之前调用 route:在路由(请求)转发时被调用 error:服务网关发生异常时被调用 post:在路由(转发)请求后 ...
- api-gateway实践(03)新服务网关 - 网关请求拦截检查
参考链接:http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html 一.为什么要拦截检查请求? 防止重放攻击.篡改重放,进行使用规格检查 ...
- 解决微服务网关Ocelot使用AddStoreOcelotConfigurationInConsul后请求404问题
一个小插曲,最近研究 netcore 微服务网关,在使用AddStoreOcelotConfigurationInConsul将配置存到consul后,任何经过网关的请求都出现404,并且没有任何有用 ...
随机推荐
- NLP(十三) 词义消歧
一个词可能有多个词义 例句 解释 She is my date date: 约会,日期 You have taken too many leaves to skip cleaning leaves i ...
- 2019nc#10
题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A Blackjack 点击查看 背包DP 32/109 补好了 B Coffee Chicken 点击查看 进入讨论 738/2992 通过 ...
- Codeforces Round #504 E - Down or Right 交互题
1023E 题意: 交互题.在一个有障碍地图中,问如何走才能从(1,1)走到(n,n),只能向右或者向左走.每次询问两个点,回复你这两个点能不能走通. 思路: 只用最多2*n-2次询问.从(1,1), ...
- POJ3233 Matrix Power Series 矩阵快速幂 矩阵中的矩阵
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 27277 Accepted: ...
- 【Offer】[54] 【二叉搜索树的第k小节点】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 给定一棵二叉搜索树,请找出其中第k小的节点.例如,在下图的二叉搜索树里,按节点数值大小顺序,第三小节点的值是4.  牛客网刷题地址 思 ...
- Java开学测试
这次开学测试要求做一个信息系统,该系统完成学生成绩录入,修改,计算学分积点和查询学生成绩的简单功能. 下面是我写的代码 //信1805-3班 20183641 赵树琪 package test; im ...
- 基于SSM后台管理系统/人事管理系统
今天给大家分享一个基于SpringMVC+Mybatis+Mysql的后台管理系统,顾名思义,一个系统一般分为前台和后台,前台主要面向用户,而后台主要面向的则是管理员,后台和前台有所不同,后台的业务一 ...
- asp.net core webapi 统一处理返回值、异常和请求参数验证
现在的开发模式很少用asp.net mvc一个项目直接操作界面和数据库了.大部分都使用前后端分离,更多的是为了让API支持移动端. 后端写webapi的时候必然需要和前端约定请求值和返回值的格式,如果 ...
- Winforn中导入Excel并显示然后获取多选框选中的内容
场景 使用NPOI导入Excel并赋值给DataTable,然后显示在DataGrdView上,并且添加多选框,然后获取选中行的内容. Winform中使用NPOI实现Excel导入并赋值给DataT ...
- 大数据平台搭建 - cdh5.11.1 - hue安装及集成其他组件
一.简介 hue是一个开源的apache hadoop ui系统,由cloudear desktop演化而来,最后cloudera公司将其贡献给了apache基金会的hadoop社区,它基于pytho ...