七牛鉴权QiniuToken
本文解释了生成七牛鉴权管理凭证的字符串(QiniuToken)的详细过程,共三步。
准备工作:获取密钥(AK/SK)
生成七牛鉴权凭证信息的字符串,需要用到密钥,密钥包含AccessKey/SecretKey。第一次使用七牛的API之前,用户需要在七牛开发者平台的密钥管理中取得密钥。
注意: 密钥(AccessKey/SecretKey)是非常重要且隐私的信息,泄露可能会造成严重的后果,请不要直接放在客户端。
具体步骤如下:
1)登录七牛开发者平台,
2)点击[个人面板],选择密钥管理,进入七牛的密钥管理页面,
3)在七牛的密钥管理页面,获取一对AccessKey/SecretKey。
Step1. 构造待签名的 Data
待签名的data字符串由以下几个参数构成,拼接规则为:
data = <Method> + " " + <Path> + "?<RawQuery>" + "\nHost: " + <Host> + "\nContent-Type: " + <contentType> + "\n\n" + <bodyStr>
注:<>里面的内容需替换成相应的变量。
参数 | 必选 | 说明 |
---|---|---|
Method | Y | 支持 POST、PUT 和 GET 方式, 注意方法为全大写 |
Path | Y | 请求路径。实际的请求路径详见各接口说明的请求包 |
RawQuery | N | 如不存在则不用添加 ?<RawQuery> |
Host | Y | 请求域名,例如:atlab.ai |
contentType | N | 请求内容类型,如果参数为空,则不用加 "\nContent-Type: " + <contentType > |
bodyStr | N | 请求Body<bodyStr>: 如果 <Content-Length> 存在且 Body 不为空,同时 <Content-Type> 存在且不为空也不等于 “application/octet-stream”,才加上<bodyStr> |
注意:无论<Content-Length>和 <bodyStr> 是否为空,中间的 “\n\n” 都一定要加。
示例代码为:
data= <Method> + " " + <Path>
if "<RawQuery>" != "" {
data += "?<RawQuery>"
}
data += "\nHost: " + <Host>
if "<Content-Type>" != "" {
data += "\nContent-Type: <Content-Type>"
}
data += "\n\n"
if "<bodyStr>" != "" and
"<Content-Type>" != "" and
"<Content-Type>" != "application/octet-stream" {
data += "<bodyStr>"
}
人脸识别的待签名字符串示例为:
POST /v1/face/detect
Host: argus.atlab.ai
Content-Type: application/json
{"data": {"uri":"http://img3.redocn.com/20120528/Redocn_2012052817213559.jpg"}}
Step2.计算 HMAC-SHA1 签名,并对签名结果做 URL 安全的 Base64 编码
import hmac
import base64
import hashlib
sign = hmac.new("<Your_Secret_Key>", data, hashlib.sha1).digest()
encodedSign = base64.urlsafe_b64encode(sign)
Step3.将 Qiniu 标识与 AccessKey、encodedSign 拼接得到管理凭证
<QiniuToken> = "Qiniu " + "<Your_Access_Key>" + ":" + encodedSign
文档反馈
(如有产品使用问题,请 提交工单)