签名算法
服务开通 RESTful API 和计量计费 RESTful API 使用签名(signature 字段)进行身份验证。签名是经过加密处理的字符串,仅在服务商和声网之间共享。服务商可以通过签名鉴定声网发送的 HTTP 请求。
本文介绍如何生成签名。
概述
签名由源串(SourceString)和密钥(apiSecret&) 经过加密算法的处理而生成,加密算法如下:
- 
GET 和 PUT 方法: Shellsignature = URLEncode(Base64( HMAC-SHA1( apiSecret&, SourceString) ), "UTF-8")
- 
POST 方法: Shellsignature = Base64( HMAC-SHA1( apiSecret&, SourceString) )
收到请求后,你需要通过上述算法自行生成一个签名。如果你生成的签名与请求中收到的签名一致,说明该请求由声网发送。
计算示例(GET 和 PUT )
以声网调用计量计费 RESTful API 查询用量为例,请求 URL 为:
https://[host]/usage?fromTs=1619913600&toTs=1619917200&pageNum=1&apiKey=pzD5XinRSlmA64tZx81fL92YcBsJK0gd&signature={signature}
则加密算法中的各项参数为:
| 参数 | 值 | 
|---|---|
| SourceString | GET&%2Fusage&apiKey%3DpzD5XinRSlmA64tZx81fL92YcBsJK0gd%26fromTs%3D1619913600%26pageNum%3D1%26toTs%3D1619917200 | 
| apiSecret | U1SXE6k57vxVRjTomgquwC2F3tH8ziOB(仅作演示,你需要换成自己的apiSecret) | 
| signature | SFVnCVlRbrZcjMPGTWVxAE4QWZ8%3D | 
下面介绍签名计算的详细步骤。
第 1 步:构造源串
构造源串的步骤如下:
- 
将 HTTP 请求的类型与 “&” 拼接: ShellGET&
- 
对请求 URL 中位于 [host]之后、?之前的路径(即/usage)进行 URL 编码,与 “&” 拼接。此时的源串如下:ShellGET&%2Fusage&
- 
按字典升序排列路径参数中除 signature以外的所有字段(即fromTs、toTs、apiKey),字段均写为key=value(字段名称 = 取值)的形式,不同字段用 “&” 拼接:ShellapiKey=pzD5XinRSlmA64tZx81fL92YcBsJK0gd&fromTs=1619913600&pageNum=1&toTs=1619917200
- 
对步骤 3 得到的字符串进行 URL 编码,并与步骤 2 的源串拼接,最终生成的源串如下: ShellGET&%2Fusage&apiKey%3DpzD5XinRSlmA64tZx81fL92YcBsJK0gd%26fromTs%3D1619913600%26pageNum%3D1%26toTs%3D1619917200
第 2 步:拼接密钥
密钥由 apiSecret 和 “&” 拼接生成。其中的 apiSecret 是你在申请入驻云市场时提供给声网的信息。
例如:你提供的 apiSecret 是 U1SXE6k57vxVRjTomgquwC2F3tH8ziOB,则对应的密钥为 U1SXE6k57vxVRjTomgquwC2F3tH8ziOB&。
第 3 步:生成签名
GET 和 PUT 方法的加密算法如下:
signature = URLEncode(Base64( HMAC-SHA1( apiSecret&, SourceString) ), "UTF-8")
使用前两步的 SourceString 和 apiSecret&,生成签名如下:
SFVnCVlRbrZcjMPGTWVxAE4QWZ8%3D
计算示例(POST)
以声网调用服务开通 RESTful API 激活插件为例,请求包体为:
{
    "projectId": "430892",
    "apiKey": "pzD5XinRSlmA64tZx81fL92YcBsJK0gd",
    "signature": "To be generated"
}
请求 URL 为:
https://[host]/customers/123456/projects/new
则加密算法中的各项参数为:
| 参数 | 值 | 
|---|---|
| SourceString | POST&%2Fcustomers%2F123456%2Fprojects%2Fnew&apiKey%3DpzD5XinRSlmA64tZx81fL92YcBsJK0gd%26projectId%3D430892 | 
| apiSecret | U1SXE6k57vxVRjTomgquwC2F3tH8ziOB(仅作演示,你需要换成自己的apiSecret) | 
| signature | QRJDBm3gGmlFb5ZF9XBqm7u4EkI= | 
下面介绍签名计算的详细步骤。
第 1 步:构造源串
构造源串的步骤如下:
- 
将 HTTP 请求的类型与 “&” 拼接: ShellPOST&
- 
对请求 URL 中位于 [host]之后的路径(即/customers/123456/projects/new)进行 URL 编码,与 “&” 拼接。此时的源串如下:ShellPOST&%2Fcustomers%2F123456%2Fprojects%2Fnew&
- 
按字典升序排列请求包体中除 signature以外的所有字段(即projectId、apiKey),字段均写为key=value(字段名称 = 取值)的形式,不同字段用 “&” 拼接:ShellapiKey=pzD5XinRSlmA64tZx81fL92YcBsJK0gd&projectId=430892对该字符串进行 URL 编码,并与之前的源串拼接,最终生成的源串如下: ShellPOST&%2Fcustomers%2F123456%2Fprojects%2Fnew&apiKey%3DpzD5XinRSlmA64tZx81fL92YcBsJK0gd%26projectId%3D430892
第 2 步:拼接密钥
密钥由 apiSecret 和 “&” 拼接生成。其中的 apiSecret 是你在申请入驻云市场时提供给声网的信息。
例如:你提供的 apiSecret 是 U1SXE6k57vxVRjTomgquwC2F3tH8ziOB,则对应的密钥为 U1SXE6k57vxVRjTomgquwC2F3tH8ziOB&。
第 3 步:生成签名
POST 方法的加密算法如下:
signature = Base64( HMAC-SHA1( apiSecret&, SourceString) )
使用前两步的 SourceString 和 apiSecret&,生成签名如下:
QRJDBm3gGmlFb5ZF9XBqm7u4EkI=