#
接口认证签名方法
在每次API调用时,为了验证调用者的身份,防止未授权的调用。数产平台要求企业系统根据请求的API生成一个签名,作为请求参数一起发送到数产平台。 数产平台验证签名正确后,才允许对API的调用。
在创建企业应用时,数产平台为每个企业应用生成了一组App ID
和App Secret
,用于企业系统调用API时生成签名。企业系统需要将这组值放置于配置文件中,并做好保密。
请务必做好App Secret
的保密存储。若App Secret
泄露,会导致API调用权限扩散,造成企业信息泄露的风险。
若App Secret
不慎泄露,可在数产平台的企业应用详情页重置App Secret
,生成一个新的值,并吊销旧值的访问权限。
#
1. 在请求参数中加入当前时间戳
获取当前时间戳,以Query参数的形式拼接在请求URL后。 注意时间戳必须是Unix Timestamp的格式,精确到秒。例如:
https://api.ip.hetutec.com/v2/apps/1583379053837029376/hashes?timestamp=1666341958
数产平台会将收到的时间戳和自己服务器的时间进行对比,如果差距超过10分钟,则会禁止API访问。因此需要在每次调用API时,都重新获取新的时间戳。
#
2. 生成待签名字符串
将待发送请求的Query参数和Body参数全部放在一起(不要signature字段),按照字母表顺序进行排序,然后使用Query String
的方式进行编码,并拼接在请求的request path后面。
下面是个待签名字符串的例子,注意最后生成的待签名字符串中参数的数量和顺序。
待签名请求:
[POST] https://api.ip.hetutec.com/v2/apps/1583379053837029376/hashes?timestamp=1666341958
[Body]
{
"hash": "85ca20b5ff6c404e75426f7b14caef6cfee82b0ae3822ae56e3a674856afbf6f",
"type": 4
}
待签名字符串:
https://api.ip.hetutec.com/v2/apps/1583379053837029376/hashes?hash=85ca20b5ff6c404e75426f7b14caef6cfee82b0ae3822ae56e3a674856afbf6f×tamp=1666341958&type=4
#
3. 生成签名
使用HMAC-SHA256
算法,将App Secret
作为密钥,生成上面的待签名字符串的校验码,即为请求的签名。
在Golang中生成签名的代码示例:
signatureData = hmacSha256({ signString }, { appSecret })
signature = hex.EncodeToString( {signatureData} )
签名示例:
[POST] https://api.ip.hetutec.com/v2/apps/1583379053837029376/hashes?timestamp=1666341958
[Body]
{
"hash": "85ca20b5ff6c404e75426f7b14caef6cfee82b0ae3822ae56e3a674856afbf6f",
"type": 4
}
[App ID]
1583379053837029376
[App Secret]
UgHWn1Cd0lEdNOZV6a2FpOaL3b5HFDbU
待签名字符串:
https://api.ip.hetutec.com/v2/apps/1583379053837029376/hashes?hash=85ca20b5ff6c404e75426f7b14caef6cfee82b0ae3822ae56e3a674856afbf6f×tamp=1666341958&type=4
生成的签名:
a7feff32026eb4dd4b36b0f384696c74745cb6ddb6754d54c2645fd75cfcc043
#
4. 将签名加入请求参数中,发起请求
在请求的Query参数中增加signature
字段,并填入上一步生成的值,然后就可以发送API请求了。
[POST] https://api.ip.hetutec.com/v2/apps/1583379053837029376/hashes?timestamp=1666341958&signature=a7feff32026eb4dd4b36b0f384696c74745cb6ddb6754d54c2645fd75cfcc043
[Body]
{
"hash": "85ca20b5ff6c404e75426f7b14caef6cfee82b0ae3822ae56e3a674856afbf6f",
"type": 4
}