apisix~key-auth多消费的使用

打印 上一主题 下一主题

主题 1584|帖子 1584|积分 4752

在 APISIX 中使用 key-auth 插件实现基于密钥的认证,以下是详细的设置步骤,包罗怎样生存密钥和证书,以及怎样将这些信息分配给客户端 A 和 B。
场景说明


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

虽然你提到了证书,但 key-auth 插件自己并不直接处理证书,而是基于预定义的密钥(key)进行认证。通常,你只需为每个客户端生成一个唯一的密钥即可。
为客户端 A 和 B 生成密钥:
  1. # 为客户端 A 生成密钥
  2. echo "client-a-key" > client_a.key
  3. # 为客户端 B 生成密钥
  4. echo "client-b-key" > client_b.key
复制代码
步骤 2:设置 APISIX 的消费者(Consumer)

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

通过 APISIX 的 Admin API 创建消费者 A:
  1. curl -X PUT http://{APISIX_ADMIN_API}/apisix/admin/consumers/client-a \
  2. -H 'Content-Type: application/json' \
  3. -d '{
  4.   "username": "client-a",
  5.   "plugins": {
  6.     "key-auth": {
  7.       "key": "client-a-key"
  8.     }
  9.   }
  10. }'
复制代码
设置消费者 B:

通过 APISIX 的 Admin API 创建消费者 B:
  1. curl -X PUT http://{APISIX_ADMIN_API}/apisix/admin/consumers/client-b \
  2. -H 'Content-Type: application/json' \
  3. -d '{
  4.   "username": "client-b",
  5.   "plugins": {
  6.     "key-auth": {
  7.       "key": "client-b-key"
  8.     }
  9.   }
  10. }'
复制代码
步骤 3:设置路由并启用 key-auth 插件

如今需要为服务 C 设置路由,并启用 key-auth 插件以保护该路由。
设置路由:

通过 Admin API 创建路由:
  1. curl -X PUT http://{APISIX_ADMIN_API}/apisix/admin/routes/1 \
  2. -H 'Content-Type: application/json' \
  3. -d '{
  4.   "uri": "/service-c/*",
  5.   "upstream": {
  6.     "type": "roundrobin",
  7.     "nodes": {
  8.       "http://backend-service-c:80": 1
  9.     }
  10.   },
  11.   "plugins": {
  12.     "key-auth": {}
  13.   }
  14. }'
复制代码

  • uri: /service-c/* 表示匹配全部以 /service-c/ 开头的请求路径。
  • upstream: 指向后端服务 C 的所在。
  • plugins.key-auth: 启用 key-auth 插件。
步骤 4:客户端调用服务

客户端 A 和 B 在调用服务时需要携带各自的密钥作为身份验证凭据。密钥应放在 HTTP 请求头中。
客户端 A 调用服务:
  1. curl -X GET http://{APISIX_GATEWAY}/service-c/resource \
  2. -H "apikey: client-a-key"
复制代码
客户端 B 调用服务:
  1. curl -X GET http://{APISIX_GATEWAY}/service-c/resource \
  2. -H "apikey: client-b-key"
复制代码

  • apikey: HTTP 请求头中的键名,默认是 apikey,也可以通过插件设置修改。
apikey如果错误,返回401


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


  • 私钥和证书的存储:如果你需要更高的安全性,可以将密钥存储在安全的地方,例如加密存储或者环境变量中。
  • 分发密钥

    • 将密钥(如 client-a-key 和 client-b-key)分发给客户端 A 和 B。
    • 不要将私钥泄漏给其他未授权的客户端。
    • 如果需要更高的安全性,可以定期轮换密钥。

总结

通过上述设置:

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表