请选择 进入手机版 | 继续访问电脑版

[公告] 开发者文档(三)签名算法说明

[复制链接]
验证签名
iBot Cloud开放接口需要通过签名验证访问,签名的过程是将AppKey和Secret以及随机数等参数根据一定的签名规则生成签名值,用以防止请求被篡改等情况的出现,签名验证方法参见下方:
签名值计算方法
1. 用SHA1将AppKey、Realm(固定值:xiaoi.com)以及Secret值按照“AppKey:Realm:Secret”的格式进行加密。
2. 用SHA1将Method(值大写,如:POST)和URL按照“Method:URL”的格式进行加密。
3. 用SHA1将第一二步获取的值和40位随机数按照“HA1:nonce:HA2”的格式进行加密,得到签名值。
4. 将AppKey、第三步中的40位随机数以及签名值按照app_key="xxx",nonce="xxx",signature="xxx"组装成字符串。
5. 在请求头中添加Key为X-Auth的键,键值为步骤4中获得的字符串。

JAVA生成签名示例
String realm = "xiaoi.com";
String method = "POST";
String uri = "/ask.do";
byte[] b = new byte[20];
new Random().nextBytes(b);
String nonce = new String(Hex.encodeHex(b));
String HA1 = DigestUtils.shaHex(StringUtils.join(new String[] { app_key, realm, app_secret }, ":"));
String HA2 = DigestUtils.shaHex(StringUtils.join(new String[] { method, uri }, ":"));
String sign = DigestUtils.shaHex(StringUtils.join(new String[] { HA1, nonce, HA2 }, ":"));

PHP生成签名示例
$app_key="testkey";
$app_secret="testsecret";
$realm = "xiaoi.com";
$method = "POST";
$uri = "/ask.do";
$nonce="";
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
for ( $i = 0; $i < 40; $i++)
$nonce .= $chars[ mt_rand(0, strlen($chars) - 1) ];
$HA1 = sha1($app_key . ":" . $realm . ":" . $app_secret);
$HA2 = sha1($method . ":" . $uri);
$sign = sha1($HA1 . ":" . $nonce . ":" . $HA2);

C#生成签名示例
static String Hex(byte[] data) {
String r = "";
for (int i = 0; i < data.Length; i++)
r += data.ToString("X2");
return r.ToLower();
}
String realm = "xiaoi.com";
String method = "POST";
String uri = "/ask.do";
byte[] b = new byte[20];
new Random().NextBytes(b);
String nonce = Hex(b);
SHA1 sha = new SHA1CryptoServiceProvider();
byte[] HA1 = sha.ComputeHash(Encoding.UTF8.GetBytes(app_key + ":" + realm + ":" + app_secret));
byte[] HA2 = sha.ComputeHash(Encoding.UTF8.GetBytes(method + ":" + uri));
String sign = Hex(sha.ComputeHash(Encoding.UTF8.GetBytes(Hex(HA1)+":"+nonce+":"+Hex(HA2))));
回复

使用道具 举报

1条回复
本帖最后由 kun0830 于 2018-3-5 09:21 编辑

C#示例第4行有错,应该在data后面加【i】
支持 | 反对 | 回复

使用道具 举报

开发者交流
今日发帖: 0

小i微信公众号:
搜索 “xiaoirobot"
或扫描下面的二维码: