在 APISIX 中使用 key-auth 插件实现基于密钥的认证,以下是详细的配置步骤,包括如何保存密钥和证书,以及如何将这些信息分配给客户端 A 和 B。


场景说明

  • 服务 C 是后端服务,需要通过 APISIX 代理。
  • 客户端 A 和 B 需要唯一的密钥(key)来访问服务 C。
  • APISIX 使用 key-auth 插件对请求进行身份验证。

步骤 1:生成密钥和证书

虽然你提到了证书,但 key-auth 插件本身并不直接处理证书,而是基于预定义的密钥(key)进行认证。通常,你只需为每个客户端生成一个唯一的密钥即可。

为客户端 A 和 B 生成密钥:

# 为客户端 A 生成密钥
echo "client-a-key" > client_a.key # 为客户端 B 生成密钥
echo "client-b-key" > client_b.key

步骤 2:配置 APISIX 的消费者(Consumer)

APISIX 的 Consumer 实体用于管理不同的客户端及其认证信息。我们需要为客户端 A 和 B 各创建一个消费者,并为每个消费者绑定一个唯一的密钥。

配置消费者 A:

通过 APISIX 的 Admin API 创建消费者 A:

curl -X PUT http://{APISIX_ADMIN_API}/apisix/admin/consumers/client-a \
-H 'Content-Type: application/json' \
-d '{
"username": "client-a",
"plugins": {
"key-auth": {
"key": "client-a-key"
}
}
}'

配置消费者 B:

通过 APISIX 的 Admin API 创建消费者 B:

curl -X PUT http://{APISIX_ADMIN_API}/apisix/admin/consumers/client-b \
-H 'Content-Type: application/json' \
-d '{
"username": "client-b",
"plugins": {
"key-auth": {
"key": "client-b-key"
}
}
}'

步骤 3:配置路由并启用 key-auth 插件

现在需要为服务 C 配置路由,并启用 key-auth 插件以保护该路由。

配置路由:

通过 Admin API 创建路由:

curl -X PUT http://{APISIX_ADMIN_API}/apisix/admin/routes/1 \
-H 'Content-Type: application/json' \
-d '{
"uri": "/service-c/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"http://backend-service-c:80": 1
}
},
"plugins": {
"key-auth": {}
}
}'
  • uri: /service-c/* 表示匹配所有以 /service-c/ 开头的请求路径。
  • upstream: 指向后端服务 C 的地址。
  • plugins.key-auth: 启用 key-auth 插件。

步骤 4:客户端调用服务

客户端 A 和 B 在调用服务时需要携带各自的密钥作为身份验证凭据。密钥应放在 HTTP 请求头中。

客户端 A 调用服务:

curl -X GET http://{APISIX_GATEWAY}/service-c/resource \
-H "apikey: client-a-key"

客户端 B 调用服务:

curl -X GET http://{APISIX_GATEWAY}/service-c/resource \
-H "apikey: client-b-key"
  • apikey: HTTP 请求头中的键名,默认是 apikey,也可以通过插件配置修改。

apikey如果错误,返回401

步骤 5:密钥的管理和分发

  • 私钥和证书的存储:如果你需要更高的安全性,可以将密钥存储在安全的地方,例如加密存储或者环境变量中。
  • 分发密钥
    • 将密钥(如 client-a-keyclient-b-key)分发给客户端 A 和 B。
    • 不要将私钥泄露给其他未授权的客户端。
    • 如果需要更高的安全性,可以定期轮换密钥。

总结

通过上述配置:

  1. 后端服务 C 被路由 /service-c/* 所代理。
  2. 只有持有正确密钥的客户端(A 或 B)才能访问服务 C。
  3. 密钥通过 key-auth 插件进行验证,密钥存储在 APISIX 的消费者配置中。

    4

apisix~key-auth多消费的使用的更多相关文章

  1. 云原生API网关全生命周期管理Apache APISIX探究实操

    @ 目录 概述 定义 NGINX 与 Kong 的痛点 APISIX 的技术优势 特性 架构 应用场景 主要概念 部署 快速入门 quickstart安装 Admin API创建路由 RPM安装 安装 ...

  2. 日志服务Python消费组实战(三):实时跨域监测多日志库数据

    解决问题 使用日志服务进行数据处理与传递的过程中,你是否遇到如下监测场景不能很好的解决: 特定数据上传到日志服务中需要检查数据内的异常情况,而没有现成监控工具? 需要检索数据里面的关键字,但数据没有建 ...

  3. MongoDB AUTH结果验证及开启方法

          创建超级管理员(root)和普通用户(gxpt) #创建超级管理员(root) RS1:PRIMARY> use admin RS1:PRIMARY> db.createUse ...

  4. [转]SSH 原理和基本使用:ssh 安全配置 以及ssh key 认证登录

    一.什么是 SSH ? SSH全称(Secure SHell)是一种网络协议,顾名思义就是非常安全的shell,主要用于计算机间加密传输.早期,互联网通信都是基于明文通信,一旦被截获,内容就暴露无遗. ...

  5. 一次 RocketMQ 顺序消费延迟的问题定位

    一次 RocketMQ 顺序消费延迟的问题定位 问题背景与现象 昨晚收到了应用报警,发现线上某个业务消费消息延迟了 54s 多(从消息发送到MQ 到被消费的间隔): 2021-06-30T23:12: ...

  6. 删除redis对应key的缓存

    [root@zhyly-pre-002 ~]# /usr/local/redis/bin/redis-cli -p 6379 #登录redis 127.0.0.1:6379> auth 'Red ...

  7. 浅谈Redis大Key与热Key

    如何定义大 Key 和 热 Key 如何定义大 Key 如何定义热 Key 大 Key 和 热 Key 产生的原因 大 Key 和 热 Key 有哪些危害 大 Key 的危害 热 Key 的危害 如何 ...

  8. Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置

    Redis篇之操作.lettuce客户端.Spring集成以及Spring Boot配置 目录 一.Redis简介 1.1 数据结构的操作 1.2 重要概念分析 二.Redis客户端 2.1 简介 2 ...

  9. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

    --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...

  10. iOS--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook等系统服务开发汇总

    iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: ...

随机推荐

  1. 记录一次线上服务OOM排查

    外面,阳光明媚,一切正好. 就在我欢天喜地准备迎来愉快的双休时,忽然之间,天塌了. 刚上线一小时的服务内存异常OOM了! 老实说,在我印象里OOM问题只存在于网上案例中,练习编码时常两年半,还是第一次 ...

  2. golang自带的死锁检测并非银弹

    网上总是能看到有人说go自带了死锁检测,只要有死锁发生runtime就能检测到并及时报错退出,因此go不会被死锁问题困扰. 这说明了口口相传知识的有效性是日常值得怀疑的,同时也再一次证明了没有银弹这句 ...

  3. HVV面试

    linux日志管理 1. 检查系统帐号安全(1) /etc/passwd(2) /etc/shadow(3) 特权用户(uid==0)awk -F: '$3==0{print $1}' /etc/pa ...

  4. 回顾 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报

    前言 今天咱们一起来回顾一下 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报,看看是否有适合你学习和参考的项目和框架. 简报初衷 公众号每月定期推广和分享的C#/.NE ...

  5. 微服务实战系列(十)-网关高可用之中间件Keepalived-copy

    1.场景描述 因为要做网关的高可用,用到了keepalived+nginx,来保证nginx的高可用,如下图: 安装了keepavlived,走了一些弯路,记录下吧,nginx的安装就不多说了,博客已 ...

  6. mysql数据库指定ip远程访问(设置远程连接),赋权操作

    mysql数据库指定ip远程访问(设置远程连接) 远程访问mysql报错,ip不允许链接的情况:错误号码1045Access denied for user '用户名' @'数据库地址' (using ...

  7. 初识MinIO

    writer:zgx last modify: 2020年09月26日 目录 前言 MinIO简介 MinIO使用 MinIO安装 MinIO纠删码 纠删码ensure code是什么 refers ...

  8. 「youlai-boot」入门篇:从0到1搭建 Java、Spring Boot、Spring Security 企业级权限管理系统

    作者主页: 有来技术 开源项目: youlai-mall︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 仓库主页: GitCode︱ Gitee ...

  9. P1787 [入门赛 #22]非众数 Hard Version 题解

    P1787 [入门赛 #22]非众数 Hard Version 题解 原题传送门 这里对 pjh0625 的题解进行了详细解释 1. 读题 题目要求计算给定字符串中非众数子串的数量. 非众数子串 的定 ...

  10. 容器的优势,在Docker中运行Tomcat

    本文分享自天翼云开发者社区<容器的优势,在Docker中运行Tomcat>,作者:d****e 一.容器与虚拟机的区别是什么 虚拟机:虚拟机是通过Hypervisor(虚拟机管理系统,常见 ...