当前位置: 首页 > news >正文

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战


🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】


📣读完这篇文章里你能收获到

  • 🛠️ 了解APISIX身份认证的重要性和基本概念,以及如何在微服务架构中实施API安全。
  • 🔑 学习如何使用APISIX的Key Authentication插件进行API密钥管理,包括创建消费者和路由。
  • 🔄 掌握如何定期轮换API密钥,以及如何为不同消费者分配不同权限范围的密钥。
  • 📊 探索如何通过日志记录和监控来增强APISIX的安全性和可审计性。

文章目录

  • 一、引言
    • 1.1 APISIX身份认证基础
    • 1.2 APISIX支持的身份授权插件
  • 二、APISIX身份认证核心组件
    • 2.1 Consumer
    • 2.2 Key Authentication
  • 三、身份认证实战
    • 3.1 启用 Key Authentication
      • 3.1.1 创建消费者
      • 3.1.2 创建Routes
      • 3.1.3 验证
    • 3.2 自定义请求头Header
    • 3.3 禁用 Authentication
  • 四、最佳实践

一、引言

在现代微服务架构中,API的安全性至关重要。随着业务系统之间的交互越来越频繁,API成为了核心数据和服务的交换通道。Apache APISIX作为一款高性能的云原生API网关,提供了丰富的插件生态以满足各种API治理需求,其中身份认证就是关键的一环。

1.1 APISIX身份认证基础

API 网关主要作用是连接 API 消费者和提供者。出于安全考虑,在访问内部资源之前,应先对消费者进行身份验证和授权。
image.png

1.2 APISIX支持的身份授权插件

APISIX 拥有灵活的插件扩展系统,目前有很多可用于用户身份验证和授权的插件。

  • Key Authentication
  • Basic Authentication
  • JSON Web Token (JWT) Authentication
  • Keycloak
  • Casdoor
  • Wolf RBAC
  • OpenID Connect
  • Central Authentication Service (CAS)
  • HMAC
  • Casbin
  • LDAP
  • Open Policy Agent (OPA)
  • Forward Authentication
  • Multiple Authentications

二、APISIX身份认证核心组件

本文将以Apache APISIX内置的Key-Auth插件为例,详细介绍如何实现API的身份认证。

2.1 Consumer

Consumer(也称之为消费者)是指使用 API 的应用或开发人员。
在 APISIX 中,消费者需要一个全局唯一的 名称,并从上面的列表中选择一个身份验证 插件

2.2 Key Authentication

Key Authentication(也称之为密钥验证)是一个相对比较简单但是应用广泛的身份验证方法,基于HTTP Header中的API密钥对请求进行验证。每个客户端都拥有一个唯一的API密钥,当客户端发起请求时,必须在请求头中包含此密钥,服务器端的APISIX将会检查并验证该密钥的有效性。
它的设计思路如下:

  1. 管理员为路由添加一个身份验证密钥(API 密钥)。
  2. API 消费者在发送请求时,在查询字符串或者请求头中添加密钥。

三、身份认证实战

3.1 启用 Key Authentication

3.1.1 创建消费者

创建一个名为 consumer-key 的消费者,并启用 key-auth 插件,密钥设置为 secret-key。所有携带密钥 secret-key 的请求都会被识别为消费者 consumer-key。

curl -i "http://127.0.0.1:9180/apisix/admin/consumers" \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"username": "consumerkey","plugins": {"key-auth": {"key": "secret-key"}}
}'

3.1.2 创建Routes

创建一个名为routes-key的路由,并启用 key-auth 插件

curl -i "http://127.0.0.1:9180/apisix/admin/routes" \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"id": "routes-key","name": "routes-key","uri": "/ip","upstream": {"type": "roundrobin","nodes": {"httpbin.org:80": 1}},"plugins": {"key-auth": {}}
}'

3.1.3 验证

Key-Auth插件默认的Headers前缀为apikey,如需修改,可继续往下看
我们可以在以下场景中进行验证:

  1. 发送不带任何密钥的请求
curl -i "http://127.0.0.1:9080/ip"

image.png

  1. 发送携带正确密钥的请求
curl -i "http://127.0.0.1:9080/ip" -H 'apikey: secret-key'

image.png

3.2 自定义请求头Header

如果你不想从默认的 apikey header 获取 key,可以自定义 header,如下所示:

{"key-auth": {"header": "Authorization"}
}

接下来基于上面的Routes进行更改

curl -i "http://127.0.0.1:9180/apisix/admin/routes/routes-key" \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -d '
{"plugins": {"key-auth": {"header": "Authorization"}}
}'

发送携带Header为Authorization的请求进行验证

curl -i "http://127.0.0.1:9080/ip" -H 'Authorization: secret-key'

image.png

3.3 禁用 Authentication

将参数设置 _meta.disable 为 true,即可禁用密钥验证插件。

curl "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{"plugins": {"key-auth": {"_meta": {"disable": true}}}
}'

四、最佳实践

  1. 定期轮换密钥:为了增加安全性,建议定期更换API密钥,避免长期使用同一密钥导致安全风险增大。
  2. 权限细分:可以为不同消费者分配不同权限范围的密钥,用于访问不同的API资源。
  3. 监控与日志记录:利用Apache APISIX的日志插件记录相关的认证事件,以便于审计和异常检测。

相关文章:

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战

🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 📣读完这篇文章里你能收获到 🛠️ 了解APISIX身份认证的重要性和基本概念,以及如何在微服务架构中实施API安全。🔑 学习如何使…...

【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是?各自的功能是什么?2、说一下一次完整的HTTP请求…...

『大模型笔记』常见的分布式并行策略(分布式训练)

常见的分布式并行策略(分布式训练) 文章目录 一. 为什么分布式训练越来越流行二. 常见的并行策略2.1 数据并行2.2 模型并行2.3 流水并行2.4 混合并行二. 参考文献一. 为什么分布式训练越来越流行 近年来,深度学习被广泛应用到各个领域,包括计算机视觉、语言理解、语音识别、广…...

java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ 可定制化

工程项目管理软件是现代项目管理中不可或缺的工具,它能够帮助项目团队更高效地组织和协调工作。本文将介绍一款功能强大的工程项目管理软件,该软件采用先进的Vue、Uniapp、Layui等技术框架,涵盖了项目策划决策、规划设计、施工建设到竣工交付…...

3D数据格式导出工具HOOPS Publish如何生成高质量3D PDF?

在当今数字化时代,从建筑设计到制造业,从医学领域到电子游戏开发,3D技术已经成为了不可或缺的一部分。在这个进程中,将3D模型导出为3D PDF格式具有重要的意义。同时,HOOPS Publish作为一个领先的解决方案,为…...

【springboot】闲话 springboot 的几种异步机制 及 长轮询的概念和简单实现

文章目录 引子springboot的几种异步形式开启异步支持和线程池配置&#xff08;重要&#xff09;第一种&#xff1a;Async第二种&#xff1a;Callable<T>第三种&#xff1a;WebAsyncTask<T>第四种&#xff1a;DeferredResult<T> 长轮询的简单实现概念实现服务…...

Mysql---安全值守常用语句

文章目录 目录 文章目录 一.用户权限设置 用户设置 元数据查询 Union联合查询 分组查询 字符串函数 总结 一.用户权限设置 用户设置 #用户创建 create user "用户名""%主机名" identified by "密码" #用户删除 drop user 用户名 #用户查询…...

containerd快速安装指南

1 containerd快速安装指南&#x1f680; 本指南旨在提供一个简洁有效的方法来安装containerd。我们将通过一份易于理解的脚本步骤&#xff0c;指导您完成安装&#x1f527;。请根据您的实际需求&#xff0c;适当调整containerd版本及其相关依赖。 注意事项&#xff1a; 本安装…...

Javascript - 正则表达式相关的一些基础的范例

很久以前的一些学习资料&#xff0c;归档发布&#xff1b; 正则表达式的基础&#xff0c;以HTML代码来示范&#xff1a; <html><head><title></title><script language"javascript">function test(){//从页面要求客户输入一个字符串…...

JUC:线程活跃性(死锁、活锁、饥饿)

文章目录 线程活跃性死锁活锁解饿 线程活跃性 死锁 两个线程相互等待对方已拥有的锁&#xff0c;就会相互一直等待&#xff0c;不会停止。 t1拥有a锁&#xff0c;等待b锁。 t2拥有b锁&#xff0c;等待a锁。 Slf4j(topic "c.Test3") public class st3 {public st…...

RGB到灰度图像的转换原理及例程

RGB到灰度图像的转换是一种常用的图像处理操作&#xff0c;其原理是根据人眼对不同颜色的敏感度&#xff0c;将彩色图像的红、绿、蓝三个通道的像素值按照一定权重进行加权平均&#xff0c;得到灰度图像的像素值。 在RGB图像中&#xff0c;每个像素点由红、绿、蓝三个分量组成…...

PCA+DBO+DBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper!

PCADBODBSCN聚类&#xff0c;蜣螂优化算法DBO优化DBSCN聚类&#xff0c;适合学习&#xff0c;也适合发paper&#xff01; 一、蜣螂优化算法 摘要&#xff1a;受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发&#xff0c;提出了一种新的基于种群的优化算法(Dung Beetle Optim…...

创建数据库与表单以及管理表单和数据

一、用于创建数据库的命令以及作用 命令作用CREATE DATABASE 数据库名称创建新的数据库DESCRIBE 表单名称描述表单UPDATE 表单名称SET attribute新值WHERE attribute>原始值更新表单中的数据USE 数据库名称指定使用的数据库SHOW databases显示当前已有的数据库SHOW tables显…...

Milvus+ATTU环境搭建

1.使用Docker Compose安装Milvus Standalone 下载安装单机版milvus向量数据库 https://milvus.io/docs/install_standalone-docker.md wget https://github.com/milvus-io/milvus/releases/download/v2.2.12/milvus-standalone-docker-compose.yml -O docker-compose.yml sud…...

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果 一、简单介绍 二、简单图像浮雕效果实现原理 三、简单水彩画效果案例实现简单步骤 四、注意事项…...

Chrome浏览器 安装Vue插件vue-devtools

前言 vue-devtools 是一个为 Vue.js 开发者设计的 Chrome 插件。它可以让你更轻松地审查和调试 Vue 应用程序。与普通的浏览器控制台工具不同&#xff0c;Vue.js devtools 专为 Vue 的响应性数据和组件结构量身定做。 1. 功能介绍 组件树浏览&#xff1a;这个功能可以让你查…...

相册清理大师-手机重复照片整理、垃圾清理软件

相册清理大师是一款超级简单实用的照片视频整理工具。通过便捷的操作手势&#xff0c;帮助你极速整理相册中的照片和视频、释放手机存储空间。 【功能简介】 向上滑动&#xff1a;删除不要的照片 向左滑动&#xff1a;切换下一张照片 向右滑动&#xff1a;返回上一张照片 整理分…...

【GitLab】Ubuntu 22.04 快速安装 GitLab

在 Ubuntu 22.04 上安装最新版本的 GitLab&#xff0c;可以按照以下步骤操作&#xff1a; 1. 更新系统&#xff1a; 在终端中执行以下命令以确保系统是最新的&#xff1a; sudo apt update sudo apt upgrade2. 安装依赖&#xff1a; 安装 GitLab 所需的依赖包&#xff1a; …...

Linux重点思考(下)--shell脚本使用以及内核开发

Linux重点思考(下&#xff09;--shell脚本使用和组合拳 shell脚本的基础算法shell脚本写123...n的值&#xff0c;说思路Shell 脚本用于执行服务器性能测试的死循环Shell 脚本备份和定时清理垃圾文件 shell脚本的内核开发正向映射反向映射 shell脚本的基础算法 shell脚本写123……...

2024世界技能大赛某省选拔赛“网络安全项目”B模块--应急响应解析

广东省第三届职业技能大赛“网络安全项目”B模块任务书 PS: 关注鱼影安全第一部分 网络安全事件响应任务 1:应急响应第二部分 数字取证调查第三部分 应用程序安全:需要环境可以私信博主~PS: 关注鱼影安全 模块 B 竞赛项目试题 本文件为:2024世界技能大赛某省选拔赛-模块 B …...

苹果与百度合作,将在iPhone 16中使用生成式AI

3月25日&#xff0c;《科创板日报》消息&#xff0c;苹果将与百度进行技术合作&#xff0c;为今年即将发布的iPhone16、Mac系统和iOS 18提供生成式AI&#xff08;AIGC&#xff09;功能。 据悉&#xff0c;苹果曾与阿里巴巴以及另外一家国产大模型厂商进行了技术合作洽谈。最终…...

java中的单例模式

一、描述 单例模式就是程序中一个类只能有一个对象实例 举个例子: //引出单例模式&#xff0c;一个类中只能由一个对象实例 public class Singleton1 {private static Singleton1 instance new Singleton1();//通过这个方法来获取实例public static Singleton1 getInstance…...

pytorch笔记篇:pandas之数据预处理(更新中)

pytorch笔记篇&#xff1a;pandas之数据预处理 pytorch笔记篇&#xff1a;pandas之数据预处理(更新中)测试例代码相关的算子 pytorch笔记篇&#xff1a;pandas之数据预处理(更新中) 测试例代码 print(train_data.iloc[0:4, [0, 1, 2, 3, -3, -2, -1]]) # (※1) 为什么test_da…...

【安全用电管理系统的应用如何保证用电安全】Acrel-6000安科瑞智慧安全用电解决方案

政策背景 国家部委 ※2017年5月3日国务院安委会召开电气火灾综合治理工作视频会议&#xff0c;决定在全国范围内组织开展为期3年的电气火灾综合治理工作。 公安部领导 ※公安部副部长李伟强调&#xff1a;向科技要战斗力&#xff0c;加快推进“智慧消防”建设不断提升火灾防控…...

数据分析之POWER Piovt透视表分析

将几个数据表之间进行关联 生成数据透视表 超级透视表这里的字段包含子字段 这三个月份在前面的解决办法 1.选中这三个月份&#xff0c;鼠标可移动的时候移动到后面 2.在原数据进行修改 添加列获取月份&#xff0c;借助month的函数双击日期 选择月份这列----按列排序-----选择月…...

机器人寻路算法双向A*(Bidirectional A*)算法的实现C++、Python、Matlab语言

机器人寻路算法双向A*&#xff08;Bidirectional A*&#xff09;算法的实现C、Python、Matlab语言 最近好久没更新&#xff0c;在搞华为的软件挑战赛&#xff08;软挑&#xff09;&#xff0c;好卷只能说。去年还能混进32强&#xff0c;今年就比较迷糊了&#xff0c;这东西对我…...

智慧公厕产品的特点、应用场景

随着城市化进程的加速和智能科技的不断发展&#xff0c;智慧公厕作为城市管理的重要组成部分&#xff0c;逐渐成为了现代城市的一道靓丽风景线。它的特点和应用场景备受人们关注和喜爱。 智慧公厕的特点有哪些呢&#xff1f;首先&#xff0c;它智能化的设备和感应技术为其特点…...

vue 插槽(二)

渲染作用域​ 插槽内容可以访问到父组件的数据作用域&#xff0c;因为插槽内容本身是在父组件模板中定义的。举例来说&#xff1a; <span>{{ message }}</span> <FancyButton>{{ message }}</FancyButton> 这里的两个 {{ message }} 插值表达式渲染…...

【Java】MyBatis快速入门及详解

文章目录 1. MyBatis概述2. MyBatis快速入门2.1 创建项目2.2 添加依赖2.3 数据准备2.4 编写代码2.4.1 编写核心配置文件2.4.2 编写SQL映射文件2.4.3 编写Java代码 3. Mapper代理开发4. MyBatis核心配置文件5. 案例练习5.1 数据准备5.2 查询数据5.2.1 查询所有数据5.2.2 查询单条…...

Matlab将日尺度数据转化为月尺度数据

日尺度转化为月尺度 clcclear all% load datadata xlread(data.xlsx) % 例如该数据为1961-01-01至2022-12-31&#xff0c;共计22645天data data(:,1:3) % 该数据有22645行&#xff0c;数据分别为降水&#xff0c;气温&#xff0c;湿度等三列dt datetime(1961-01-01):datatim…...

宝鸡网站建设的公司/什么时候友情链接

http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions001.htm#autoId2 本文内容 NLS 字符函数 附录 Oracle 字符函数包括&#xff1a; 返回字符值的字符函数 NLS 字符函数 返回数字值的字符函数 返回数字值的字符函数 返回数字值的函数可以把任何字符类型作为其参…...

网站在建设中是什么意思/交换链接的其它叫法是

1、Ext2文件系统规划(参照《鸟哥Linux私房菜基础篇》)磁盘分区后进行格式化&#xff0c;这时文件系统会将inode与block规划好&#xff0c;除非再次进行格式化&#xff0c;否则不会改变。但是如今的文件系统很大&#xff0c;有的高达几百G&#xff0c;这样会是的inode与block的数…...

南昌网站建设收费/宣传推广文案

转载于:https://www.cnblogs.com/wangshen31/p/6792622.html...

wordpress facebook login/谷歌外链工具

两个节点&#xff0c;都可以更新数据&#xff0c;并且互为主从&#xff0c;容易产生的问题&#xff1a;数据不一致&#xff1b;因此慎用&#xff0c;考虑要点&#xff1a;自动增长id&#xff0c;配置一个节点使用奇数id 主主复制的配置步骤&#xff1a; (1) 各节点使用一个惟一…...

做一个b2c网站/注册城乡规划师好考吗

文章目录PIL 基础语法一、 简介1、 基本介绍2、 特点3、 安装二、 Image 对象1、 实例化对象1.1 实例化1.2 图像模式2、 对象属性3、 格式转换3.1 save 方法3.2 convert 方法4、 图片缩放5、 创建缩略图6、 图像分离与合并6.1 split 方法6.2 merge 方法6.3 blend 方法7、 图像处…...

微信公众号转入公司网站建设/seo优化关键词0

java quaEclipse生态系统和Eclipse基金会的状况 那是2004年。以前由IBM主导的用于促进Eclipse平台的工业联盟刚刚转变为“供应商中立” Eclipse基金会。 该基金会的主要目的是将Eclipse建立为全球领先的Java开发平台。 如今&#xff0c;这一目标已基本实现&#xff0c;基金会的…...