关键词:
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
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
3、API项目中在Startup的ConfigureService方法中注入,并且在Controller或Action上加配置文件中的ProlicyName的配置名称,本例是permission
1 services.AddApiJwtAuthorize((context) => 2 3 //这里根据context中的Request和User来自定义权限验证,返回true为放行,返回fase时为拦截,其中User.Claims中有登录时自己定义的Claim 4 return true; 5 )
1 [Authorize("permission")] 2 [Route("api/[controller]")] 3 [ApiController] 4 public class ValuesController : Controller 5 6 //…… 7
具体体安例参照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网的概念:用顶点表示活动,用弧表示活... 查看详情