请求鉴权
七牛云会对每一个API请求进行身份验证,用户需要使用 密钥(AK/SK) 经过特定方法生成 管理凭证 QiniuToken 并在 HTTP 请求头部使用Authorization 字段传入该管理凭证,形式如下:
Authorization: <QiniuToken>
七牛支持对各语言服务端 SDK 都已经封装管理凭证,不需要再手动生成,各 SDK 详细信息可见软件开发工具包。
生成QiniuToken
准备工作.获取密钥(AK/SK)
生成七牛管理凭证,需要用到密钥,密钥包含AccessKey/SecretKey。第一次使用七牛API之前,您需要在七牛开发者平台的 密钥管理 中取得密钥。
注意: 密钥(AccessKey/SecretKey)是非常重要且隐私的信息,泄露可能会造成严重的后果,请不要直接放在客户端。
具体步骤如下:
Step1. 构造待签名的 Data
待签名的data字符串由以下几个参数构成,拼接规则为:
data = <Method> + " " + <Path> + "?<RawQuery>" + "\nHost: " + <Host> + "\nContent-Type: " + <contentType> + "\n\n" + <bodyStr>
注:<>里面的内容需替换成相应的变量。
参数 | 必填 | 说明 |
---|---|---|
Method | 是 | 支持 GET、POST、PUT 和 DELETE 方式, 注意方法为全大写 |
Path | 是 | 请求路径,实际的请求路径详见各接口说明的请求包 |
RawQuery | 否 | 如不存在则不用添加 ?<RawQuery> |
Host | 是 | 请求域名,例如:pili.qiniuapi.com |
contentType | 否 | 请求内容类型,如果参数为空,则不用加 "\nContent-Type: " + <ontentType > |
bodyStr | 否 | 请求Body <bodyStr>: 如果 <Content-Length> 存在且 Body 不为空,同时 <Content-Type> 存在且不为空也不等于 "application/octet-stream"时,才需要加上 |
注意:无论<Content-Type>
和 <bodyStr>
是否为空,中间的 “\n\n” 都一定要加。
代码为:
// 1. 添加 Path
data = "<Method> <Path>"
// 2. 添加 Query,前提: Query 存在且不为空
if "<RawQuery>" != "" {
data += "?<RawQuery>"
}
// 3. 添加 Host
data += "\nHost: <Host>"
// 4. 添加 Content-Type,前提: Content-Type 存在且不为空
if "<Content-Type>" != "" {
data += "\nContent-Type: <Content-Type>"
}
// 5. 添加回车
data += "\n\n"
// 6. 添加 Body,前提: Content-Length 存在且 Body 不为空,同时 Content-Type 存在且不为空或 "application/octet-stream"
bodyOK := "<Content-Length>" != "" && "<Body>" != ""
contentTypeOK := "<Content-Type>" != "" && "<Content-Type>" != "application/octet-stream"
if bodyOK && contentTypeOK {
data += "<Body>"
}
Step2.计算 HMAC-SHA1 签名,并对签名结果做URL 安全的 Base64 编码
sign = hmac_sha1(data, "Your_Secret_Key")
encodedSign = urlsafe_base64_encode(sign)
Step3.将 Qiniu 标识与 AccessKey、encodedSign 拼接得到管理凭证
<QiniuToken> = "Qiniu " + "Your_Access_Key" + ":" + encodedSign
QiniuToken示例
GET /v2/hubs/PiliSDKTest/streams/Y2FydGVyMjAwMA== HTTP/1.1
Host: pili.qiniuapi.com
User-Agent: pili-sdk-go/v2 go1.6 darwin/amd64
Authorization: Qiniu 7O7hf7Ld1RrC_fpZdFvU8aCgOPuhw2K4eapYOdII:PGTUV-oRxWAIl6mdneJPSJieyyQ=
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip
文档反馈
(如有产品使用问题,请 提交工单)