ocelot.jwtauthorize:一个基于网关的jwt验证包(代码片段)

老桂博客 老桂博客     2022-11-21     418

关键词:

Ocelot作为基于.net core的API方关,有一个功能是统一验证,它的作用是把没有访问权限的请求挡在API网关外面,而不是到达API网关事端的API时才去验证;之前我有一篇博文https://www.cnblogs.com/axzxs2001/p/8005084.html,作过说明,这篇博文说明了实现代码,今天我把这个实现作了整理,封装成一个Nuget包,供大家方便调用。

Web API的验证一般是用UserName和Password请求到Token,然后每次请求需要权限的API接口是把Token带到请求的Header中,作为凭据,API服端接收到请求后就要对客户端带的Token作验证,查看Token是否正确,是否过期,如果没有问题,再对该用户作权鉴,该用户是否有权限访问本API接口;这样看来,登录获取Tokent算一块,成功登录后,每次带Token请求又分两块:一块是验证,一块是鉴权,所以在Ocelot.JwtAuthorize中一共分三块。

项目的源码位于https://github.com/axzxs2001/Ocelot.JWTAuthorize

Nuget是https://www.nuget.org/packages/Ocelot.JwtAuthorize

使用也非常简单,首先有统一的配置文件(网关项目中,API项目中,验证项目中)

1 "JwtAuthorize": 
2   "Secret": "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",
3   "Issuer": "gsw",
4   "Audience": "everyone",
5   "PolicyName": "permission",
6   "DefaultScheme": "Bearer",
7   "IsHttps": false,
8   "Expiration": 50000
9 
View Code

1、网关项目中在Startup的ConfigureService方法中注入services.AddOcelotJwtAuthorize()即可。

2、验证项目中在Startup的ConfigureService方法中注入services.AddTokenJwtAuthorize(),同时验证项目还有一个作用是分发Token,前提是用户有正确的用户名密码,所以要做一个登录的Colloer和Action来实现,注意登录时Claim中的信息是在API项目中验证权限的信息。

 1 readonly ILogger<LoginController> _logger;
 2 //ITokenBuilder是用来生成Token的
 3 readonly ITokenBuilder _tokenBuilder;
 4 public LoginController(ITokenBuilder tokenBuilder, ILogger<LoginController> logger)
 5        
 6            _logger = logger;
 7            _tokenBuilder = tokenBuilder;
 8  
 9        
10        [HttpPost]
11        public IActionResult Login([FromBody]LoginModel loginModel)
12        
13            _logger.LogInformation($"loginModel.UserName login!");
14            if (loginModel.UserName == "gsw" && loginModel.Password == "111111")
15            
16                var claims = new Claim[] 
17                    new Claim(ClaimTypes.Name, "gsw"),
18                    new Claim(ClaimTypes.Role, "admin"),
19                  
20                ;               
21                var token = _tokenBuilder.BuildJwtToken(claims);
22                _logger.LogInformation($"loginModel.UserName login success,and generate token return");
23                return new JsonResult(new  Result = true, Data = token );
24            
25            else
26            
27                _logger.LogInformation($"loginModel.UserName login faile");
28                return new JsonResult(new
29                
30                    Result = false,
31                    Message = "Authentication Failure"
32                );
33            
34        
View Code

3API项目中在StartupConfigureService方法中注入,并且在Controller或Action上加配置文件中的ProlicyName的配置名称,本例是permission

1 services.AddApiJwtAuthorize((context) =>
2 
3     //这里根据context中的Request和User来自定义权限验证,返回true为放行,返回fase时为拦截,其中User.Claims中有登录时自己定义的Claim
4     return true;
5 )
View Code
1     [Authorize("permission")]
2     [Route("api/[controller]")]
3     [ApiController]
4     public class ValuesController : Controller
5     
6         //……
7     
View Code

 

具体体安例参照https://github.com/axzxs2001/Ocelot.JWTAuthorize下的Sample


一个基于.net高性能跨平台内网穿透工具

...脑,我们都会用到内网穿透的工具。今天给大家推荐一个高性能跨平台内网穿透工具的开源项目。项目简介一个基于.Net开发的内网穿透工具,一个易于扩展、易于维护的内网穿透框架。你也可以利用该框架,自定义... 查看详情

如何基于声网互动白板实现一个多人数独游戏(代码片段)

...。他基于Vue、声网的互动白板的代码模板,搭建出了一个支持多人互动的数独游戏。本文记录了他的实现过程,欢迎大家也可以尝试实现自己的小游戏或应用。我基于声网互动白板的SDK与WindowManager开发了一个场景化窗口... 查看详情

基于roadm的全光网结构以及什么是cdc-froadm?

...信业务的多样化和复杂化,城域网演进成多环结构,包括一个核心环网和多个边缘环网。接入网由城域环网提供支持,并延伸到终端用户附近。接入网与用户之间的最后连接方式包括FTTx(光纤到商务楼宇、学校和家庭,等等)... 查看详情

基于php032校园二手网闲置物品交易系统

...可供交易产品,并达到更有利的宣传。为大学生提供一个方便、价廉、合理的闲置物品交易平台,旨在造就一个循环再利用的场所,同时也贯彻“低碳经济”的尽量满足大学生在校期间买卖闲置物品的需要, 查看详情

基于区块链技术的“三体五信”算网运营体系研究

...的发展道路,叠加算力承载的数据与应用安全性要求,下一个发展阶段的算力定价模式应从“算效、时延、绿碳、安全”四个维度进行重新设计,即算力价格=f(算效,时延,绿碳,安全)。 【结论】基于算网底座基建化和... 查看详情

基于本体的语义网生成工具

】基于本体的语义网生成工具【英文标题】:toolsforgeneratingsemanticwebbasedonontology【发布时间】:2012-10-1914:40:36【问题描述】:在protegeIDE中创建本体和使用jena在netbeans中创建RDf/ontology有什么区别?我正在使用本教程http://jena.sourcefor... 查看详情

配电网优化基于matlabgui配电网潮流计算与经济调度模糊满意度评价含matlab源码2159期(代码片段)

...图1所示,界面友好、简单、易于操作。主界面上方有一个“开始”按钮,可以控制整个软件的执行。主界面右方有三个选项,分别为“配电网潮流计算模块”、“经济调度模糊满意度评价模块”和“退出”选项,... 查看详情

配电网优化基于matlabgui配电网潮流计算与经济调度模糊满意度评价含matlab源码2159期(代码片段)

...图1所示,界面友好、简单、易于操作。主界面上方有一个“开始”按钮,可以控制整个软件的执行。主界面右方有三个选项,分别为“配电网潮流计算模块”、“经济调度模糊满意度评价模块”和“退出”选项,... 查看详情

基于hadoop的个人网盘的设计任务书

...3575/18338145任务书发出时间2019年01月28日设计(论文)题目基于Hadoop的个人网盘的设计与实现设计(论文)起止时间2019年04月01日——2019年06月07日主要内容:充分调研并了解基于Hadhoop的个人网盘的需求(包括:功能需求和性能需求... 查看详情

基于ssh端口转发实现内网客户机的远程(代码片段)

零、版本履历日期说明2021.08.16初稿一、一个看似奇葩的需求最近项目上有这么个需求,看似奇葩,但很有必要。现场通过4G物联网卡上网,并且只开通了部分IP白名单,要求实现远程到现场。换句话说,通过这... 查看详情

基于eth测试网搭建chainlink节点(代码片段)

基于ETH测试网搭建Chainlink节点本文主要参考Chainlink官方文档(https://docs.chain.link/docs/running-a-chainlink-node),但是搭建过程中有些问题,文档也没有给出,因此写下此文进行一些记录。所需环境及组件操作是基于... 查看详情

弱网测试之序言

...立完成实时消息的限定。这里给出弱网测试的框架:本文基于两种思路实现1、基于fiddler+wanem完成2、基于硬件路由器TP-LINK完成 查看详情

ASP.NET MVC 内联网应用程序。基于角色的身份验证链接到应用程序中的用户表

...【发布时间】:2014-04-2219:23:40【问题描述】:我正在编写一个将使用ActiveDirectory身份验证的ASP.NETMVC应用程序。我不希望用户必须登录我 查看详情

配电网重构基于matlabyalmip求解含sop+二阶锥配电网重构问题含matlab源码2264期

...代码方式1:完整代码已上传我的资源:【配电网重构】基于matlabyalmip求解含sop+二阶锥配电网重构问题【含Matlab源码2264期】点击上面蓝色字体,直接付费下载,即可。获取代码方式2:付费专栏物理应用(Matlab)备注:点击上面... 查看详情

第一个基于arcgis的android应用

 使用AndroidStudio创建第一个工程打开AndroidStudio,新建工程。在Applicationname处填写项目名称,companydomain是公司地址,将来作为包名,点击Next下一步。 选择PhoneandTablet,API选择16以后版本(Arcgis官网教程这样,可能系统要求)... 查看详情

5g架构5g核心网——基于服务的网络架构

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!博主链接本人就职于国际知名终端厂商,负责modem芯片研发。在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力... 查看详情

基于sasl+acl的kafka集群内外网访问

需求: 阿里云ECS服务器上部署了Kafka伪集群,要求内网其他机器访问时broker走内网网卡,外部用户访问均走公网网卡IP: 内网:10.130.10.10      外网:12.12.12.12解决方法:      &nb... 查看详情

基于aoe网的关键路径的求解

...“关键”二字一般都是指临界点。凡事万物都遵循一个度的问题,那么存在度就会自然有临界点。关键路径也正是研究这个临界点的问题。在学习关键路径前,先了解一个AOV网和AOE网的概念:用顶点表示活动,用弧表示活... 查看详情