You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby生成API认证HMAC签名与官方预期值不符问题排查

你代码存在两个核心错误:

  1. HMAC密钥使用错误
    生成签名时你传入的密钥是API_KEY,但按照接口规范,HMAC计算需要用SECRET_KEY作为密钥。
  2. 哈希值处理逻辑错误
    你先调用了OpenSSL::HMAC.hexdigest得到十六进制格式的哈希字符串,再对这个字符串做Base64编码,这不符合规范。正确逻辑应该是直接获取原始二进制格式的哈希结果,再对二进制结果做Base64编码。你之前得到的长字符串本质是对十六进制哈希结果做Base64编码的产物,和规范要求的对原始二进制哈希编码的结果完全不同。

修正后的代码如下:

ts = '1529342939277'
nonce = '883b170c-a768-41a1-ae6d-c626323aa128'
host = 'ws.idms.lexisnexis.com'
resource_path = '/restws/identity/v3/accounts/11111/workflows/rdp.test.workflow/conversations'
body_hash = 'fQoIAs0IO4vNleZVE9tcI3Ni7h+niT+GrrgEHsKZOyM='

API_KEY = '6njQLkz7uCiz1ZeJ1bFCWX4DFVTfKQXa'
SECRET_KEY = 'CcdaZEt7co647iJoEc5G29CHtlo7T9M3'

# 拼接签名串
signature = [ts, nonce, host, resource_path, body_hash].join("\n")
# 修正逻辑:用SECRET_KEY作为密钥,直接获取二进制哈希结果再做Base64编码
mac = Base64.strict_encode64(OpenSSL::HMAC.digest('SHA256', SECRET_KEY, signature))

运行上述代码得到的mac值就是预期的Syb6i+sRygAGCgxLQJ4NwwKcT5Mnkh4r3QXgwZ3vmcE=。

内容的提问来源于stack exchange,提问作者mr_muscle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:06:03