签名方式
更新时间:2024-12-02 14:31:39
本章节主要介绍在基石智算平台的 API 请求中,签名(signature)的生成方法。可以根据实际情况使用API密钥来完成签名。
前提条件
在调用 API 之前,用户需要先在基石智算控制台平台上申请 API 密钥。
-
API 示例:
access_key_id = 'QYACCESSKEYIDEXAMPLE' secret_access_key = 'SECRETACCESSKEY'
-
请求参数示例
{ 'reverse': False, 'namespace': 'ALL', 'zone': 'hd1', 'access_key_id': 'QYACCESSKEYIDEXAMPLE', 'image_name': '', 'limit': 3, 'name': '', 'offset': 0 }
签名步骤
-
按照参数名进行升序排列,排序后的参数为:
{ 'access_key_id': 'QYACCESSKEYIDEXAMPLE', 'image_name': '', 'limit': 3, 'name': '', 'namespace': 'ALL', 'offset': 0, 'reverse': False, 'zone': 'hd1' }
-
构造 URL 请求,参数名和参数值之间用
=
号连接,参数和参数之间用&
号连接,构造后的URL
请求为:'access_key_id=QYACCESSKEYIDEXAMPLE&image_name=&limit=3&name=&namespace=ALL&offset=0&reverse=False&zone=hd1'
-
构造被签名串,被签名串的构造规则为:
被签名串 = HTTP请求方式 + "\n" + uri + "\n" + url 请求串
根据上述的参数,假设请求路径为
/aicp/trains/namespaces/ALL/trains/
,签名串为:'GET\n/aicp/trains/namespaces/ALL/trains/\naccess_key_id=QYACCESSKEYIDEXAMPLE&image_name=&limit=3&name=&namespace=ALL&offset=0&reverse=False&zone=hd1'
-
计算签名
-
将API密钥的私钥 ( secret_access_key ) 作为key,生成被签名串的 HMAC-SHA256 或者 HMAC-SHA1 签名,更多信息可参见 RFC2104。
-
将签名进行 Base64 编码。
-
将 Base64 编码后的结果进行 URL 编码。
以 python3.10 为例,给出签名代码:
import hashlib import base64 import hmac from urllib import parse secret_access_key = "SECRETACCESSKEY" string_to_sign = 'GET\n/aicp/trains/namespaces/ALL/trains/\naccess_key_id=QYACCESSKEYIDEXAMPLE&image_name=&limit=3&name=&namespace=ALL&offset=0&reverse=False&zone=hd1' h = hmac.new(secret_access_key.encode(encoding="utf-8"), digestmod=sha256) h.update(string_to_sign.encode(encoding="utf-8")) sign = base64.b64encode(h.digest()).strip() signature = parse.quote_plus(sign)
-
-
追加到第二步参数的后面。
-
请求参数
'access_key_id=QYACCESSKEYIDEXAMPLE&image_name=&limit=3&name=&namespace=ALL&offset=0&reverse=False&zone=hd1&signature=uNDWS%2BeFb3gr6sfklJVbk%2F335Oa26ljMifKhVNI6koSMI%3D'
-
实际 url
'https://ai.coreshub.cn:443/aicp/trains/namespaces/ALL/trains?access_key_id=QYACCESSKEYIDEXAMPLE&image_name=&limit=3&name=&namespace=ALL&offset=0&reverse=False&zone=hd1&signature=uNDWS%2BeFb3gr6sfklJVbk%2F335Oa26ljMifKhVNI6koSMI%3D'
-