token由多個參數構成,如下表:
Item | Type | 是否必須 | 參數說明 | 參數示例 |
---|---|---|---|---|
version | string | 是 | 參數組版本號,日期格式,目前僅支援“2018-10-31” | 2018-10-31 |
res | string | 是 | 訪問資源 resource 格式為:父資源類/父資源ID/子資源類/子資源ID 見res使用場景說明 | products/123123 products/123123/devices/ mqs/osndf09nand9f21390 |
et | int | 是 | 訪問過期時間expirationTime,unix時間 當一次訪問參數中的et時間小於當前時間時,平台會認為訪問參數過期從而拒絕該訪問 | 1537255523 表示:北京時間2018-09-15:25:23 |
method | string | 是 | 簽名方法signatureMethod 支援md5 、sha1、sha256 | sha256 |
sign | string | 是 | 簽名結果字串signature |
關於token參數的特別說明:
使用場景如下表:
場景 | res參數格式 | 示例 |
---|---|---|
API訪問 | products/{pid} | products/123123 |
設備連接 | products/{pid}/devices/{device_name} | products/123123/devices/m |
參數sign的生成演算法為:
sign = base64(hmac_<method>(base64decode(accessKey), utf-8(StringForSignature)))
其中:
StringForSignature組成示例如下:
StringForSignature = et + '\n' + method + '\n' + res+ '\n' + version
注意:每個參數均為key=value格式組成,但是僅參數中的value參與計算簽名的字串StringForSignature的組成,若token參數如下
et = 1537255523
method = sha1
res = products/123123
version = 2018-10-31
則用於計算簽名的字串StringForSignature為(按照et、method、res、version的順序)
StringForSignature = "1537255523" + "\n" + "sha1"+ "\n" + "products/123123"+ "\n" + "2018-10-31"
計算出sign後,將每個參數均採用key=value的形式表示,並用'&'作為分隔符號,示例如下:
version=2018-10-31&res=products/123123&et=1537255523&method=sha1&sign=ZjA1NzZlMmMxYzIOTg3MjBzNjYTI2MjA4Yw=
token中key=value的形式的value部分需要經過URL編碼,需要進行編碼的特殊符號如下:
No. | 符號 | 編碼 |
---|---|---|
1 | + | %2B |
2 | 空格 | %20 |
3 | / | %2F |
4 | ? | %3F |
5 | % | %25 |
6 | # | %23 |
7 | & | %26 |
8 | = | %3D |
編碼後,上例中實際傳輸token為:
version=2018-10-31&res=products%2F123123&et=1537255523&method=sha1&sign=ZjA1NzZlMmMxYzIOTg3MjBzNjYTI2MjA4Yw%3D