开源网关Apache APISIX启用JWT身份验证

在这里插入图片描述

说明:

  • 本文APISIX的配置参考我之前写的《Ubuntu部署Apache APISIX》

创建最小API

首先,确保你已经安装了.NET 6 SDK。创建文件夹“MinimalApiDemo”,VS Code打开文件夹,打开终端

dotnet new web -o MinimalApiDemo
cd MinimalApiDemo

修改Program.cs

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();builder.WebHost.UseUrls("http://0.0.0.0:5001");app.MapGet("/", () => "Hello, World!");app.MapGet("/protect/{name}", (string name) => $"Hello, {name}!");app.Run();

启动项目

dotnet run

浏览器打开“http://192.168.8.220:5001/protect/tom”,显示结果

Hello, tom!

创建消费者

创建两个消费者,管理员admin和用户user

{"username": "admin_role","plugins": {"jwt-auth": {"exp": 86400,"key": "admin","secret": "admin1234567890"}}
}
{"username": "user_role","plugins": {"jwt-auth": {"exp": 86400,"key": "user","secret": "user1234567890"}}
}

在这里插入图片描述

在这里插入图片描述

创建上游

在这里插入图片描述

创建公共API端点

为JWT身份验证创建公共API端点/apisix/plugin/jwt/sign

在这里插入图片描述

{"uri": "/gen_token","name": "jwttoken","plugins": {"public-api": {"uri": "/apisix/plugin/jwt/sign"}},"status": 1
}

浏览器或者Postman等工具,请求如下链接,注意这里的key为admin

http://192.168.8.249:9080/gen_token?key=admin

在这里插入图片描述

得到admin的token

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXkiOiJhZG1pbiIsImV4cCI6MTcxNzc2ODcwNH0.YeuyvRJmRHwajqmFm6G8ffYtguIW4PFoZ7LY3iDO8Kg

同理,接下来使用key为user

http://192.168.8.249:9080/gen_token?key=user

得到user的token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1c2VyIiwiZXhwIjoxNzE3NzY4ODc0fQ.ZSpDGNmBHVjoKtLxxic6S5C4auNJx1FlAJThvJReq6k

创建测试路由

测试之前的最小API接口

http://192.168.8.220:5001/protect/tom

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

【更多】【查看】的内容如下

{"uri": "/protect/*","name": "protect","methods": ["GET"],"plugins": {"consumer-restriction": {"whitelist": ["admin_role"]},"jwt-auth": {}},"upstream_id": "516993931985027773","status": 1
}

测试JWT认证

使用Postman工具,访问如下接口

http://192.168.8.249:9080/protect/tom

在这里插入图片描述

Postman提示

{"message":"Missing JWT token in request"}

Headers中Key填写“Authorization”,Value填写“Bearer [token]”(注意Bearer和[token]之间有一个空格)

使用user的token

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1c2VyIiwiZXhwIjoxNzE3NzY4ODc0fQ.ZSpDGNmBHVjoKtLxxic6S5C4auNJx1FlAJThvJReq6k

Postman提示如下。网关阻止了user用户请求

{"message":"The consumer_name is forbidden."}

在这里插入图片描述

接下来使用admin的token

Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXkiOiJhZG1pbiIsImV4cCI6MTcxNzc2ODcwNH0.YeuyvRJmRHwajqmFm6G8ffYtguIW4PFoZ7LY3iDO8Kg

在这里插入图片描述

admin用户顺序访问受保护的接口

参考

  • 公共 API | Apache APISIX®——云原生 API 网关 — public-api | Apache APISIX® – Cloud-Native API Gateway
  • 什么是基于JWT的token认证,如何配置token认证_API 网关(API Gateway)-阿里云帮助中心 (aliyun.com)
  • How To Use JWT Authentication With Web API (c-sharpcorner.com)
  • jwt-auth | Apache APISIX® – Cloud-Native API Gateway

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/345550.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JMeter接口测试工具】第二节.JMeter基本功能介绍(上)【入门篇】

文章目录 前言一、获取所有学院信息接口执行二、线程组的介绍 2.1 并发和顺序执行 2.2 优先和最后执行线程组 2.3 线程组的设置细节三、HTTP请求的介绍四、查看结果树的配置使用总结 前言 一、获取所有学院信息接口执行 我们先针对一条简单的接口进行执行&#…

代码随想录刷题笔记-哈希表篇

文章目录 242 有效的字母异位词(easy)力扣地址题目描述题目实例解题思路代码实现 383 赎金信(easy)力扣地址题目描述题目实例解题思路代码实现 49 字母异位词分组(mid)力扣地址题目描述题目实例解题思路代码实现 438 找到字符串中所有字母异位词(mid)力扣地址题目描述题目实例解…

3038. 相同分数的最大操作数目 I(Rust模拟击败100%Rust用户)

题目 给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作: 选择 nums 中的前两个元素并将它们删除。 一次操作的 分数 是被删除元素的和。 在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次…

SpringBoot整合钉钉实现消息推送

前言 钉钉作为一款企业级通讯工具,具有广泛的应用场景,包括但不限于团队协作、任务提醒、工作汇报等。 通过Spring Boot应用程序整合钉钉实现消息推送,我们可以实现以下功能: 实时向指定用户或群组发送消息通知。自定义消息内容…

Python进阶-部署Flask项目(以TensorFlow图像识别项目WSGI方式启动为例)

本文详细介绍了如何通过WSGI方式部署一个基于TensorFlow图像识别的Flask项目。首先简要介绍了Flask框架的基本概念及其特点,其次详细阐述了Flask项目的部署流程,涵盖了服务器环境配置、Flask应用的创建与测试、WSGI服务器的安装与配置等内容。本文旨在帮…

【iOS】——Runtime学习

文章目录 一、Runtime介绍二、Runtime消息传递三、实例对象、类对象、元类对象四、isa_t结构体的具体实现五、cache_t的具体实现六、class_data_bits_t的具体实现七、Runtime消息转发动态方法解析备用接收者完整消息转发 一、Runtime介绍 iOS的Runtime,通常称为Obj…

使用汇编和proteus实现仿真数码管显示电路

proteus介绍: proteus是一个十分便捷的用于电路仿真的软件,可以用于实现电路的设计、仿真、调试等。并且可以在对应的代码编辑区域,使用代码实现电路功能的仿真。 汇编语言介绍: 百度百科介绍如下: 汇编语言是培养…

【通俗易懂的Python入门基础详细教程,可分享哦!!!】

Python,作为一种高级编程语言,自其诞生以来就以其独特的魅力吸引了无数开发者。以下是对学习Python的简要介绍: 一、Python的起源与发展 Python由荷兰计算机科学家吉多范罗苏姆于1990年代初设计,其设计初衷是作为ABC语言的替代品…

计算机网络复习题

期末题库复习1 一. 单选题(共32题,100分) 1. (单选题) 在脉冲起始时刻,有无跳变来表示“0”和“1”,且在脉冲中间时刻始终发生跳变的编码是( )。 A.非归零码 B.曼彻斯特编码 C.归零码 D.差…

Facebook革新:数字社交的下一个阶段

在数字化时代,社交网络已经成为人们生活中不可或缺的一部分。作为全球最大的社交网络平台之一,Facebook一直在不断创新,引领着数字社交的发展。然而,随着科技的不断进步和社交需求的变化,Facebook正在走向一个新的阶段…

k8s和deepflow部署与测试

Ubuntu-22-LTS部署k8s和deepflow 环境详情: Static hostname: k8smaster.example.net Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 605a74a509724a88940bbbb69cde77f2 Virtualization: vmware Operating System: U…

STM32F103C8移植uCOSIII并以不同周期点亮两个LED灯(HAL库方式)【uCOS】【STM32开发板】【STM32CubeMX】

STM32F103C8移植uC/OSIII并以不同周期点亮两个LED灯(HAL库方式)【uC/OS】【STM32开发板】【STM32CubeMX】 实验说明 将嵌入式操作系统uC/OSIII移植到STM32F103C8上,构建两个任务,两个任务分别以1s和3s周期对LED进行点亮—熄灭的…

基于Python + Flask+ Mysq实现简易留言板

使用Python Flask Mysql实现简易留言板,包括网友编辑留言、修改留言,删除留言、分页显示四大功能。 写出留言板建设过程,包括开发使用工具、留言板模块设计、数据库设计、页面设计、关键技术。 留言板建设过程总结 一.开发使用…

一文学习yolov5 实例分割:从训练到部署

一文学习yolov5 实例分割:从训练到部署 1.模型介绍1.1 YOLOv5结构1.2 YOLOv5 推理时间 2.构建数据集2.1 使用labelme标注数据集2.2 生成coco格式label2.3 coco格式转yolo格式 3.训练3.1 整理数据集3.2 修改配置文件3.3 执行代码进行训练 4.使用OpenCV进行c部署参考文…

燃料电池汽车践行者

前言 见《氢燃料电池技术综述》 见《燃料电池工作原理详解》 见《燃料电池发电系统详解》 见《燃料电池电动汽车详解》 见《氢燃料电池汽车行业发展》 现代汽车(中国) 现代汽车集团,自1998年成立氢燃料电池研发小组以来深耕氢燃料电池技术&am…

Python爬虫入门与登录验证自动化思路

1、pytyon爬虫 1.1、爬虫简介 Python爬虫是使用Python编写的程序,可以自动访问网页并提取其中的信息。爬虫可以模拟浏览器的行为,自动点击链接、填写表单、进行登录等操作,从而获取网页中的数据。 使用Python编写爬虫的好处是,…

IGraph使用实例——线性代数计算(blas)

1 概述 在图论中,BLAS(Basic Linear Algebra Subprograms)并不直接应用于图论的计算,而是作为一套线性代数计算中通用的基本运算操作函数集合,用于进行向量和矩阵的基本运算。然而,这些基本运算在图论的相…

LangChain基础知识入门

LangChain的介绍和入门 1 什么是LangChain LangChain由 Harrison Chase 创建于2022年10月,它是围绕LLMs(大语言模型)建立的一个框架,LLMs使用机器学习算法和海量数据来分析和理解自然语言,GPT3.5、GPT4是LLMs最先进的代…

矩阵LU分解的应用

矩阵LU分解在机器学习和深度学习中的应用广泛,主要用于解决以下问题: 线性方程组求解:LU分解可以有效地解决线性方程组,这在训练模型时非常有用。矩阵求逆:在一些机器学习算法中,需要进行矩阵求逆操作&…

289M→259M得物包体积治理实践

一、前言 iOS应用的包体积大小是衡量得物性能的重要指标,过大包体积会降低用户对应用的下载意愿,还会增加用户的下载等待时间以及用户手机的存储空间,本文重点介绍在包体积治理中的新思路以及原理与实践。 二、原理介绍 Macho产物测试 我…