签名方法


我们的API 会对每个请求进行身份验证,用户需要使用安全凭证,经过特定的步骤对请求进行签名(Signature),每个请求都需要在公共参数中指定该签名结果并以指定的方式和格式发送请求。

为什么要进行签名

签名通过以下方式帮助保护请求:

1、验证请求者的身份 签名确保请求是由持有有效访问ClientID 和 ClientSecret 的人发送的。请参阅控制台 API 客户端凭证信息 页面获取密钥相关信息。

2、保护传输中的数据 为了防止请求在传输过程中被篡改,API 会使用请求参数来计算请求的哈希值,并将生成的哈希值加密后作为请求的一部分,发送到 API 服务器。服务器会使用收到的请求参数以同样的过程计算哈希值,并验证请求中的哈希值。如果请求被篡改,将导致哈希值不一致,API 将拒绝本次请求。

签名方法使用 HMAC-SHA256 进行加密计算,安全并且高效,性能有一定提升,推荐使用该签名方法计算签名。

API账户凭证信息

本文使用的安全凭证为密钥,密钥包括 SecretId 和 SecretKey。每个用户最多可以拥有三对密钥。

SecretId:用于标识 API 调用者身份,可以简单类比为用户名。 SecretKey:用于验证 API 调用者的身份,可以简单类比为密码。 用户必须严格保管安全凭证,避免泄露,否则将危及财产安全。如已泄露,请立刻禁用该安全凭证或者重置 SecretKey。

申请安全凭证的具体步骤如下:

登录 管理中心控制台 。 前往 API密钥 的控制台页面。 在 API密钥 页面,单击【新建应用程序】创建一对密钥。

示例数据信息

假设客户端凭证信息如下:

SecretId: df77f2de-2924-4499-adda-1c4cc243625a
SecretKey: 90075a9383e19526a9ba5814fc6b6596e14f705712a503d300a68407b7df16c0

使用以下参数进行拼接并且加密计算:

Nonce: v0j38hHHUEqFwoh0Gc8Rbfi737xtIpLL
Timestamp: 1716085926
SignatureMethod: HmacSHA256

签名过程

1、拼接待签名字符串,该数据由 clientID, nonce,timestamp,signatureMethod 按照固定顺序拼接得出。

plainText = clientID + nonce + timestamp + signatureMethod

根据拼接规则,得出待加密字符串数据:

df77f2de-2924-4499-adda-1c4cc243625av0j38hHHUEqFwoh0Gc8Rbfi737xtIpLL1716085926HmacSHA256

2、计算签名

计算派生签名密钥,伪代码如下:

hash_hmac('sha256', plainText, clientSecret))

hash_hmac 为PHP加密函数,第一个参数[sha256]为指定加密方式为 SHA256, 第二个参数[plainText]为 拼接得出的待加密字符串信息, 第三个参数[clientSecret]为加密密钥。

最终得出 Signature 结果:

5b1230f42bad2ffd5ad09890a8ebb47c02d74668be0cf7bb54a0f6a14996117b

请注意,不同的编程语言,HMAC 库函数中参数顺序可能不一样,请以实际情况为准。通常标准库函数会提供二进制格式的返回值,也可能会提供打印友好的十六进制格式的返回值。

签名代码演示

以下是PHP代码示例

$plainText = $clientID . $nonce . $timestamp . $signatureMethod;
$makeSign = hash_hmac('sha256', $plainText, $clientSecret);