> 签名算法仅在开发者希望使用原始 API 接入方式时需要自行生成,SDK中均已包含签名的生成机制。 > 本套签名生成算法较为复杂,建议新手开发者直接使用封装的SDK。 #### **签名使用场景** 本套签名生成算法仅用于软件接入部分,数据查询部分无需签名鉴权。 #### **准备工作** 1.获取所需数据 获取正确的 ID 、 SID 、 SecretKey 2.确定开发语言: 支持但不限于 java、php 、c sharp、c++、 node.js、python,根据不同的开发语言,请自行选择方法处理数据。 #### **签名流程** 最终有效签名由**两部分**组成 第一部分由键值对sign-algorithm、ak、sk拼接而成,格式如下: ~~~ sign-algorithm=HMAC-SHA1&ak=[Sid]&sk=[Secretkey] ~~~ 第二部分由键值对user、sign-time、salt、en拼接而成,格式如下: ~~~ user=[User]&sign-time=[SignTime]&salt=[Salt]&en=1 ~~~ 两部分各自拼接完成后,需对第一部分用salt的键值作为密钥进行HMAC-SHA1加密处理,对第二部分进行Base64编码。两部分通过“===”连接后即为最终有效密钥(Authorization)。 **键值说明** | 键(key) |值(value) | 描述 | --- | --- | --- |--- | | sign-algorithm |HMAC-SHA1 | 必填。<br>签名算法,目前仅支持 HMAC-SHA1,即填HMAC-SHA1 (区分大小写)。 | | sign-time |*参数[SignTime]* | 必填。<br>签名签发时间,通过 Unix 时间戳描述,以秒为单位。<br><br>**如**: 1480932292。 | | salt |*参数[Salt]* | 必填。<br>盐值,格式为随机6位纯数字,用于HMAC-SHA1的密钥,确保生成唯一有效签名。 | | user | *参数[user]* | 必填。<br>帐户 ID,在注册迅析账户时自定义的用户名。 | ak | *参数[sid]* |必填。<br>开发者创建统计对象后由系统分配的统计唯一标识。<br><br>**如**: XUNXI79340981KTrkHop 。 | | sk | *参数[Secretkey]* |必填。<br>开发者拥有的项目身份密钥。<br><br>**如**: mRxNXzFcVWwTdKrcJqBHhNVp 。 | | en | 1 |可空。<br>加密标识,详细说明见本文“安全性拓展”。 | > 1.默认的签名有效期为20s,无法更改,超时需重新申请。 > 2.ak(sid)、sk(Secretkey)等键值应妥善保管,保证仅有开发者本人和平台所知。 * * * * * #### **安全性拓展** 生成签名时,允许对SID、Secretkey两项直接暴露在程序代码里的关键信息进行加密,以密文方式组合签名,分发至不受信任的客户端中使用。 加密算法为 sha1 ,示例: `XUNXI79340981KTrkHop -> 8e9b13ee94688a86b85736f850db913bf195b334 (sha1)` 若选择使用sha1对信息加密,则Sid、Secretkey均需加密处理,且需添加 key=value 对:en=1,若不需要使用本安全拓展,请勿添加该键值对。 > 由于Base64的可逆性,强烈建议所有开发者均使用此加密方式,否则容易造成SID、SecretKey等数据的泄露,从而造成数据损失。官方提供的所有SDK中,均采用此套加密方式。 * * * * * #### **举例说明** *本例子中使用安全性拓展中提到的信息加密方式生成签名,实际开发也建议开发者使用该信息加密方式。* 我们定义参数user、ak、sk、sign-time、salt的值分别为: **admin**、**XUNXI79340981KTrkHop**、**mRxNXzFcVWwTdKrcJqBHhNVp**、**1480932292**、**123456**。 将ak、sk值进行 sha1 加密: ~~~ XUNXI79340981KTrkHop -> 8e9b13ee94688a86b85736f850db913bf195b334 mRxNXzFcVWwTdKrcJqBHhNVp -> 65d56ad91b42558c1d593362220c58b5c469a1f8 ~~~ **一、拼接信息** 拼接后所得的签名明文如下: 第一部分: `sign-algorithm=HMAC-SHA1&ak=8e9b13ee94688a86b85736f850db913bf195b334&sk=65d56ad91b42558c1d593362220c58b5c469a1f8` 第二部分: `user=admin&sign-time=1480932292&salt=123456&en=1` **二、明文加密** 通过HMAC-SHA1算法对第一步所得的签名明文进行加密,加密后得到的最终有效签名应为: 第一部分: `fa302dbbddecabdcf41b44d8987b413404d66950 算法:HMAC-SHA1 密钥:123456 ` 第二部分: `dXNlcj1hZG1pbiZzaWduLXRpbWU9MTQ4MDkzMjI5MiZzYWx0PTEyMzQ1NiZlbj0x 算法:Base64` **三、合并字符串** 通过“===”合并字符串,结果如下: `fa302dbbddecabdcf41b44d8987b413404d66950===dXNlcj1hZG1pbiZzaWduLXRpbWU9MTQ4MDkzMjI5MiZzYWx0PTEyMzQ1NiZlbj0x` 上述字符串则为最终有效签名,可直接用于发起统计请求。 至此,签名生成完毕,签名有关错误请见**错误码**文档。