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

apisix-使用hmac-auth插件进行接口签名身份验证\apisix consumer

文章目录

    • apisix-hmac-auth插件进行接口签名身份验证
    • `apisix-HMAC` 插件
      • APISIX HMAC认证的工作原理
    • 常用配置项
    • 理解APISIX中Consumer的作用(使用场景)
      • 1. 身份识别
      • 2. 权限管理
      • 3. 认证凭证存储
      • 4. 限流和配额管理
      • 5. 使用统计
    • 为什么需要Consumer
    • Consumer与路由的关系
      • 为什么认证插件需要Consumer?
      • 路由如何识别Consumer的说明
    • 不同插件对Consumer的依赖
      • 1. 需要Consumer的插件(认证类)
      • 2. 不需要Consumer的插件(功能类)
    • 绕过Consumer的方式
    • 常见报错
      • apisix报错:client request can't be validated: Missing related consumer
        • 问题原因
        • 解决方案
      • 创建consumer报错
    • 如何查看 APISIX curl操作用的 X-API-KEY

apisix-hmac-auth插件进行接口签名身份验证

HMAC 是一种基于哈希函数的消息认证码,常用于验证消息的完整性和真实性。它需要一个密钥(secret key)和一个哈希算法(如 SHA-256)来生成签名。

  • 请求签名:客户端对请求内容生成 HMAC 签名,服务端验证签名是否匹配。
  • 防篡改:确保请求在传输过程中未被修改。
  • 身份验证:验证请求是否来自合法的客户端。

apisix-HMAC 插件

官网:https://apisix.apache.org/zh/docs/apisix/plugins/hmac-auth/

hmac-auth 插件支持 HMAC(基于哈希的消息认证码)身份验证,作为一种确保请求完整性的机制,防止它们在传输过程中被修改。要使用该插件,您需要在 Consumers 上配置 HMAC 密钥,并在 Routes 或 Services 上启用该插件。

启用后,插件会验证请求的 Authorization 标头中的 HMAC 签名,并检查传入请求是否来自可信来源。具体来说,当 APISIX 收到 HMAC 签名的请求时,会从 Authorization 标头中提取密钥 ID。然后,APISIX 会检索相应的消费者配置,包括密钥。如果密钥 ID 有效且存在,APISIX 会使用请求的 Date 标头和密钥生成 HMAC 签名。如果生成的签名与 Authorization 标头中提供的签名匹配,则请求经过身份验证并转发到上游服务。

APISIX HMAC认证的工作原理

  1. 消费者配置
    • 每个消费者都有一个唯一的access_keysecret_key
    • 消费者配置中还可以指定算法、签名头等
  2. 请求流程
    • 客户端使用secret_key计算签名
    • 客户端在请求中包含access_key和签名
    • APISIX根据access_key查找对应的消费者
    • APISIX使用消费者的secret_key验证签名

常用配置项

官方文档:https://apisix.apache.org/zh/docs/apisix/plugins/hmac-auth/#

常用配置项:

  • “hide_credentials”: true
    向上游隐藏授权信息# 传递给上游的 Authorization 标头包含签名和所有其他详细信息。这可能会带来安全风险。

  • clock_skew
    客户端请求的时间戳与 APISIX 服务器当前时间之间允许的最大时间差(以秒为单位)。这有助于解决客户端和服务器之间的时间同步差异,并防止重放攻击。时间戳将根据 Date 头中的时间(必须为 GMT 格式)进行计算。

  • signed_headers
    ​ 客户端请求的 HMAC 签名中应包含的 HMAC 签名头列表

  • validate_request_body
    ​ 如果为 true,则验证请求正文的完整性,以确保在传输过程中没有被篡改。具体来说,插件会创建一个 SHA-256 的 base64 编码 digest,并将其与 Digest 头进行比较。如果 Digest 头丢失或 digest 不匹配,验证将失败.
    ​ 请求体(request body)会参与 HMAC 签名的计算。如果请求体被篡改,签名验证会失败。
    适用场景:需要确保请求体完整性的高安全性接口(如支付、敏感数据提交)。

  • @request-target的含义

在 APISIX 的 hmac-auth 插件中,@request-target 是一个特殊的占位符,用于表示 HTTP 请求的 目标部分(即请求方法和路径)。它是 HMAC 签名计算中的一个关键字段,用于确保请求的完整性和防篡改。

hmac-auth 插件的 signed_headers 配置中,可以指定 @request-target 参与签名计算。例如:

"plugins": {"hmac-auth": {"signed_headers": ["@request-target", "date", "content-type"]
http://www.lryc.cn/news/572399.html

相关文章:

  • SpringBoot项目启动时自动加载数据到Redis的完整实现方案,用于存储字典,定时任务,登录用户等
  • Spring @Autowired 依赖注入全解析
  • 语音情感识别:CNN-LSTM 和注意力增强 CNN-LSTM 模型的比较分析
  • Hive优化详细讲解
  • Redis 的优势有哪些,它是CP 还是 AP?CAP 理论又是什么?
  • C#的泛型和匿名类型
  • Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器
  • Java八股文——计算机网络「传输层篇」
  • CppCon 2017 学习:Everything You Ever Wanted to Know about DLLs
  • CppCon 2017 学习:dynamic_cast from scratch
  • 【AJAX 实战】图书管理系统上 渲染图书列表+新增图书+删除图书
  • windows系统JDK1.8 与JDK 17切换
  • css3 文本效果(text-shadow、text-overflow、word-wrap、word-break)文本阴影、文本换行、文本溢出并隐藏显示省略号
  • 数据结构 6(算法)
  • CMake实践:指定gcc版本编译和交叉编译
  • 华为OD机试-最佳植树距离-二分(JAVA 2025A卷)
  • DeserializationViewer使用说明
  • Java并发编程实战 Day 29:大数据处理的并行计算模型
  • Arduino Nano 33 BLE Sense Rev 2开发板使用指南之【环境搭建 / 点灯】
  • FPGA基础 -- Verilog 命名事件
  • React 19中如何向Vue那样自定义状态和方法暴露给父组件。
  • 什么是Spark
  • 服务器如何从http升级到https(nginx)
  • Kaggle-Plant Seedlings Classification-(多分类+CNN+图形处理)
  • HashMap算法高级应用实战:频率类子数组问题的5种破解模式
  • ThreadLocal以及内存泄露原理的源码解析
  • NodeJS 对接 Outlook 发信服务器实现发信功能
  • 视频汇聚EasyCVR平台v3.7.2发布:新增全局搜索、播放器默认解码方式等4大功能
  • Python PyMySQL【mysql适配器】 简介
  • leetcode:461. 汉明距离(python3解法,数学相关算法题)