动态签名验证

每次调用接口都需要添加签名才能使用,签名是根据当前时间戳和其他参数实时计算出来的,并且签名一般只能使用一次。签名具体方式是在访问接口时添加额外的URL请求参数,如下所示

?adminkey={adminkey}&customerId={customerId}&nonce={nonce}&timestamp={timestamp}&sign={sign}
签名相关参数说明
名称 说明
adminkey 客户管理key
adminsecret 客户密钥
customerId 客户编码
robotsecret 机器人密钥
nonce 随机数(自己随机生成即可)
timestamp 当前时间戳(调用方生成13位当前时间戳,要尽可能准确,否则会导致签名失败)
uri 接口URL(不含URL请求参数)
sign 计算出的签名(计算方法见下节)
签名计算方法
md5(adminkey:${adminKey},adminsecret:${adminSecret},customerId:${customerId},nonce:${nonce},robotsecret:${robotSecret},timestamp:${timestamp},uri:${uri})
签名计算注意事项
  1. 使用13位当前时间戳,并尽可能准确,以保证签名有效
  2. 不同接口计算签名时,uri参数不同;同一个接口如果租户不同、机器人不同或者知识规则不同时,uri参数也不同
  3. 每次调用接口前,签名要根据当前时间戳实时计算出来,不能把签名缓存下来使用
签名计算示例

Python

import hashlib
...
hashlib.md5().update("adminkey:aWNzLWJpZy1jdXN0b21lci13eXMtMTUyMzUyMDg5NDU0MQ==,adminsecret:a3a2338ba18c9a9e240fd38f5ee1af09,customerId:wys,nonce:12345678,robotsecret:acb1ceb16997c62664197638e0f89cc0,timestamp:1524131680855,uri:/v1/openapi/tenants/132/robots/f638ad60-84c7-4f14-9990-7f8af0dfe3b3/robot/ask")

Java

import org.apache.commons.codec.digest.DigestUtils;
...
DigestUtils.md5Hex("adminkey:aWNzLWJpZy1jdXN0b21lci13eXMtMTUyMzUyMDg5NDU0MQ==,adminsecret:a3a2338ba18c9a9e240fd38f5ee1af09,customerId:wys,nonce:12345678,robotsecret:acb1ceb16997c62664197638e0f89cc0,timestamp:1524131680855,uri:/v1/openapi/tenants/132/robots/f638ad60-84c7-4f14-9990-7f8af0dfe3b3/robot/ask");

results matching ""

    No results matching ""