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


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

  • 🛠️ 了解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的日志插件记录相关的认证事件,以便于审计和异常检测。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 全栈体系【四阶】(十九)

第五章 深度学习 一、基本理论 4. 神经网络的改进 4.3 循环神经网络 4.3.1 标准 CNN 模型的不足 假设数据之间是独立的。标准 CNN 假设数据之间是独立的,所以在处理前后依赖、序列问题(如语音、文本、视频)时就显得力不从心。这一类数据…

Eigen之norm函数

向量的范数是一个将向量映射到非负实数的函数,通常表示为 ||x||。它是向量空间中的一种度量,用来衡量向量的大小或长度。范数满足以下性质: 非负性:对于任意向量 x,范数 ||x|| 大于等于零,且当且仅当 x 是零向量时等于零。齐次性:对于任意标量 α,范数 ||αx|| 等于 α…

2.Wireshark使用实训——分析FTP包

1.实训目的 掌握Wireshark的基本使用方法,具备Wireshark数据包内容的简单分析能力。 2.应用环境 某公司为了保障网络环境安全,需要使用Wireshark对网络中的数据包进行分析。 3.实训设备 安装有eNSP的计算机。 4&…

电机控制杂谈——永磁同步电机中的永磁体谐波反电势

1.问题的引出 在我的谐波抑制专题中,讲了三种谐波抑制的策略。当时是通过增大逆变器死区来产生较大的谐波。但是在实际电机里面,我感觉死区的影响基本上没有。。。课题组的驱动器中,逆变器的非线性其实基本可以忽略不计了。 但是&#xff0…

Vuex笔记

Vuex vuex 是实现数据集中式状态管理的插件。数据由 vex 统一管理。其它组件都去使用 vuex 中的数据。只要有其中一个组件去修改了这个 共享的数据,其它组件会同步更新。 多个组件之间依赖于同一状态。来自不同组件的行为需要变更同一状态。 环境搭建 1、vue2安…

YOLOv9改进策略:block优化 | ECVBlock即插即用的多尺度融合模块,助力小目标涨点 | 顶刊TIP 2023 CFPNet

💡💡💡本文改进内容:ECVBlock即插即用的多尺度融合模块,助力检测任务有效涨点! yolov9-c-EVCBlock summary: 1011 layers, 68102630 parameters, 68102598 gradients, 252.4 GFLOPs 改进结构图如下&#x…

5个便宜的OV通配符SSL证书品牌

在当今互联网时代,网络安全、数据安全备受关注,作为网站拥有者,保护用户隐私数据安全变得越来越重要。其中,SSL证书是保障网站传输数据安全的关键,而在众多的选择中,OV通配符SSL证书以其验证显示企业身份、…

小林制药含红曲成分保健品疑致2死106人住院:红曲究竟是何方神圣?

一、红曲引发公众担忧二、红曲的生成及其特性三、红曲对人体的潜在风险四、小林制药及其在中国市场的产品情况 参考资料:三好夫人养生网 一、红曲引发公众担忧 近日,小林制药的一款含有红曲成分的保健品被疑似引发严重健康风险,导致两人死亡…

AutoCAD 2024 for Mac/Win:重塑设计绘图新纪元,引领行业变革先锋

在数字化时代的浪潮中,设计绘图工具的发展日新月异,AutoCAD 2024作为一款集创新、高效、智能于一体的CAD设计绘图软件,正以其卓越的性能和人性化的操作体验,引领着行业变革的新潮流。 AutoCAD 2024不仅继承了前代版本的优秀基因&…

【zip技巧】4种方法,删除ZIP压缩包密码

之前给大家介绍了zip压缩包加密方法,那么zip压缩包取消密码,大家了解多少呢?有密码的情况下,有哪些方法可以取消密码?无密码又该如何取消密码?今天总结四个方法分享给大家。 一、 最原始的方法&#xff0…

vue3 引入svg 图片的详细方法

我们都知道 svg 文件比图片小的多,可以节省很多空间,这对页面性能来说是个很大的提升。 下面介绍一下 vue3 项目中使用 svg 的详细方法: (1)安装依赖插件 npm install vite-plugin-svg-icons -D(2&#x…

Springboot整合瀚高

需要下载highgo驱动,然后将jar包打入进自己本地maven中 下载地址: highgi6.2.4 1.打开jar包所在的文件,然后在该文件夹中打开命令窗口(或者先打开命令窗口,然后cd到jar所在文件夹) install-file -Dfile:jar包名Dart…

java 面向对象入门

类的创建 右键点击对应的包,点击新建选择java类 填写名称一般是名词,要知道大概是什么的名称,首字母一般大写 下面是创建了一个Goods类,里面的成员变量有:1.编号(id),2.名称&#x…

微信小程序页面制作练习——制作一个九宫格导航图

要求&#xff1a; 代码实现&#xff1a; 先将所需要的资源图片存入我的image文件里面 模拟练习供参考&#xff0c;不建议这样存入image里&#xff0c;因为本地图片占内存太大&#xff0c;不能预览。 一、list.wxml里面搭建框架代码&#xff1a; <!--pages/list/list.wxml…

基于朴素贝叶斯算法和vue分离式架构的新闻数据情感分析可视化

基于朴素贝叶斯算法和vue分离式架构的新闻数据情感分析可视化 作品简介一、技术栈二、功能三、系统展示 作品简介 在本篇博客中&#xff0c;我将带您探索一个基于Python的新闻数据分析项目&#xff0c;其中涉及爬虫、可视化、情感分析等多种技术&#xff0c;并通过整合Django和…

阿里云 -- 连接云服务器ECS、管理云服务器ECS、WordPress 页面配置

连接云服务器ECS 1. 远程连接云服务器ECS&#xff0c;点击实例最右侧操作列的远程连接按钮&#xff0c;并在弹出的对话框中点击立即登录 2. 登录云服务器ECS&#xff0c;通过密码认证方式&#xff0c;输入用户名和密码 提示&#xff1a;新创建的ECS实例状态即使为运行中&#…

【AutoML】一个用于图像、文本、时间序列和表格数据的AutoML

一个用于图像、文本、时间序列和表格数据的AutoML AutoGluon介绍安装AutoGluon快速上手 参考资料 AutoGluon自动化机器学习任务&#xff0c;使您能够在应用程序中轻松实现强大的预测性能。只需几行代码就可以训练和部署有关图像&#xff0c;文本&#xff0c;时间序列和表格数据…

FlorisBoard:Android开源键盘的现代化选择

FlorisBoard&#xff1a;Android开源键盘的现代化选择 简介 FlorisBoard是一款免费且开源的安卓键盘&#xff0c;适用于Android 7.0及以上版本的设备。它的现代化设计和用户友好的界面使其在众多键盘应用中脱颖而出。FlorisBoard的独特之处在于它注重用户体验的同时&#xff0…

三位数组合-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第42讲。 三位数组合&#…

第17篇:七段数码管译码器

Q&#xff1a;之前我们设计实现的逻辑电路最终输出结果都是通过LED显示&#xff0c;本篇我们将实现用七段数码管来显示输出结果。 A&#xff1a;七段数码管显示基本原理&#xff1a;DE2-115开发板有8个共阳极数码管&#xff0c;即低电平逻辑值0点亮数码管段、逻辑值1来使数码管…