token 算法

token由多个参数构成,如下表:

名称类型是否必须参数说明参数示例
versionstring参数组版本号,日期格式,目前仅支持"2018-10-31"2018-10-31
resstring访问资源 resource
格式为:父资源类/父资源ID/子资源类/子资源ID
见res使用场景说明
products/123123
products/123123/devices/78329710
mqs/osndf09nand9f21390
etint访问过期时间 expirationTime,unix时间
当一次访问参数中的et时间小于当前时间时,平台会认为访问参数过期从而拒绝该访问
1537255523
表示:北京时间 2018-09-18 15:25:23
methodstring签名方法 signatureMethod
支持md5、sha1、sha256
sha256
signstring签名结果字符串 signature

关于token参数的特别说明:

res使用场景说明

使用场景如下表:

场景res参数格式示例说明
API访问products/{pid}products/123123
设备连接products/{pid}/devices/{device_name}products/123123/devices/mydev需使用设备级密钥

sign签名算法

参数sign的生成算法为:

sign = base64(hmac_<method>(base64decode(accessKey), utf-8(StringForSignature))) 

其中:

  • accessKey为OneNET为独立资源(例如,产品)分配的唯一访问密钥,其作为签名算法参数之一参与签名计算,为保证访问安全,请妥善保管
  • accessKey参与计算前应先进行base64decode操作
  • 用于计算签名的字符串 StringForSignature的组成顺序按照参数名称进行字符串排序,以'/n'作为参数分隔,当前版本中按照如下顺序进行排序:et、method、res、version

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编码,需要进行编码的特殊符号如下:

序号 符号 编码
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

个搜索结果,搜索内容 “

    0 个搜索结果,搜索内容 “