签名算法 v2
签名算法 v2
::: tip
- v1与v2签名算法相同,V2对签名采用了不同的数据结构。
- 如果api使用v2签名,建议在头中包含
X-LF-Signature-Type:2.0
。
:::
步骤
- 所有非空参数(包括path, query, body)以key value的JSON String按字典序排列作为签名的数据。
- 数据作SHA1摘要。
- 用RSA私钥进行签名运算。
- Base64编码结果。
sign= Sign( data, algo=sha1withRSA, key=privateKey)
构造需要签名的数据
1. Header
在v2版本中,timestamp
和nonce
参数需要在请求header中,并且它们应该包含在String
格式的数据中以便签名。 可选header参数X-LF-Signature-Type
可以用来表示不同的签名版本,但在数据构造中不是必需的。
参数 | 位置 | 必须 | 构造数据 | 备注 |
---|---|---|---|---|
timestamp | Header | 必须 | 是 | UTC epoch time, in ms |
nonce | Header | 必须 | 是 | Random integer value |
X-LF-Signature-Type | Header | 可选 | 否 | 现有API(截止23年2月20日前发布)默认: 1.0 , 新API:2.0 |
2. URI和路径
URI必须包含在签名数据中,包括路径参数的值。 Key是x-sign-uri
。
3. 查询参数
查询参数需要包含在签名数据中,在键(参数名)值对中,无论具体的API文档中定义的参数数据类型时什么,所有值都应是String
格式。
当查询参数的值为数组类型时,使用,(逗号)分隔元素。
4. Body
当方法为Post、Put、Delete或Patch时,body参数应包含在签名数据中,且保持原始JSON格式(不更改值数据类型)。
5. 数据构造
步骤:
同 V1版本
- Null和空参数不需要包含在签名数据中。
- 所有的键值对都将首先按键的字母顺序排序,以JSON格式,然后对JSON进行字符串化。
- 结果应该是一个没有任何分隔符的标准JSON字符串
示例: GET
//示例
# Header
timestamp: 1674197059220
nonce: 1
# Assume API is: GET https://api.linksfield.net/cube/v4/sims/{sim_id}/usage
# path parameter: sim_id = 89852002021102915651
# query parameters: begin_from , end_by , category, period_type
GET https://api.linksfield.net/cube/v4/sims/89852002021102915651/usage?begin_from=2023-01&category=data&end_by=2023-01&period_type=2
# Data for signing, after sorting and JSON Stringifying
{"begin_from":"2023-01","category_type":"data","end_by":"2023-01","nonce":"1","period_type":"2","timestamp":"1674197059220","x-sign-uri":"/cube/v4/sims/89852002021102915651/usage"}
示例: POST
# Header
timestamp: 1674197059220
nonce: 1
# Assume API is: POST https://api.io.linksfield.net/cube/v4/sims/{sim_id}/bundle
POST https://api.linksfield.net/cube/v4/sims/89000100010003125832/bundle
{
"bundle_id": "LP09823222320",
"bundle_type": 10,
"cycles": 3
}
# Data for signing
{"bundle_id":"LP09823222320","bundle_type":10,"cycles":3,"nonce":"1","timestamp":"1674197059220","x-sign-uri":"/cube/v4/sims/89000100010003125832/bundle"}
最后修改时间: 1 年前