请求鉴权
七牛云会对每一个API请求进行身份验证,用户需要使用 密钥(AK/SK) 经过特定方法生成 管理凭证 QiniuToken 并在 HTTP 请求头部使用Authorization 字段传入该管理凭证,形式如下:
Authorization: <QiniuToken>
生成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 | 是 | 请求域名,例如:mls.cn-east-1.qiniumiku.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
IAM鉴权
Miku的S3API可以通过子账号来请求。
七牛主账号可以申请子账户,获取对应的IAM鉴权Token:
AccessKey: IAM-xxxx
SecretKey: xxxxx
鉴权方式和上述的Qiniu鉴权方式相同,最后的请求方式如下:
curl -v 'http://mls.cn-east-1.qiniumiku.com/?trafficStats&begin=20240101000000&end=20240129105148&g=5min&select=flow&flow=downflow' -H 'Content-Type: application/json' -H 'Authorization: Qiniu <IAM-AccessKey>:<signToken>'
文档反馈
(如有产品使用问题,请 提交工单)