沧州市网站制作公司,沈阳哪里做网站,网站建设群,wordpress单图模式对于微服务网关来说#xff0c;统一请求验证是一个比较重要和常用的功能#xff0c;通过网关验证后台服务就无须关注请求验证#xff1b;对于多语言平台的服务而言制定验证方式和变更验证配置都是一件比较繁琐和工作量大的事情。Bumblebee提供JWT验证插件#xff0c;只需要… 对于微服务网关来说统一请求验证是一个比较重要和常用的功能通过网关验证后台服务就无须关注请求验证对于多语言平台的服务而言制定验证方式和变更验证配置都是一件比较繁琐和工作量大的事情。Bumblebee提供JWT验证插件只需要简单配置即可让网关实现请求统一验证。引用插件Bumblebee中使用JWT需要引用两个插件分别是Bumblebee.Configuration和Bumblebee.Jwt。加载启动后就可以通过管理工具进行插件配置. g new Gateway();g.HttpOptions(o {o.Port 80;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)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;JWT配置插件使用需要进行配置可以通过点击插件进入相关配置页面。示例配置如下:{Key: ExxUqmeDKnAk1eMHV02ICJkwp82RsleM887yRnQS3Gg8OHCxWsLPlzCEAJActCo6y6Mae26JeGDFx7aYkeP7Efl6yh/d1q3XYRCdDLLGbzkt3vR92H6s78P7JILNgZMiO6XoekKXfT2Qxle7Gyu/1d39NloKhqXgBdgzeobyyo,MD5: false,DBType: MYSQL,ConnectionString: Server192.168.2.19;Databaseworld;Uidroot;Pwd123456;,VerifyPaths: [^/api.* ],Table: _users,TokenTimeOut: 200,RemoveHeaders: [Cookie ],LoginMaxRps: 200}Key JWT处理密钥MD5 是否要把密码转MD5再查询DBType 数据类型分别:MSSQL,MYSQL,PGSQLConnectionString 数据库连接字符串VerifyPaths 需要验证的路径列表正则表达式。Table 用户表名称TokenTimeOut 凭证超时时间单位是分钟RemoveHeaders转发时移走请求头列表LoginMaxRps登陆限制每秒允许并发数如果设置成零则不限制JWT相关访问接口http://host/__system/jwt/login?namehenrypwd123456cookietrue登陆获取Token访问Url,cookie参数表示返回Token并写入Cookiehttp://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?namehenrypwd123456cookietrue,当凭证获取后就可以访问服务并在服务中可以正常获取jwt_user和jwt_role信息。