七牛鉴权QiniuToken

最近更新时间:2018-06-11 16:43:15

生成七牛鉴权管理凭证的字符串(QiniuToken)的详细过程,共三步。

准备工作:获取密钥(AK/SK)

生成七牛鉴权凭证信息的字符串,需要用到密钥,密钥包含AccessKey/SecretKey。第一次使用七牛的API之前,用户需要在七牛开发者平台的密钥管理中取得密钥。

注意: 密钥(AccessKey/SecretKey)是非常重要且隐私的信息,泄露可能会造成严重的后果,请不要直接放在客户端。

具体步骤如下:

1)登录七牛开发者平台,

2)点击[个人面板],选择密钥管理,进入七牛的密钥管理页面,
https://odum9helk.qnssl.com/2a083e0d2ef9a3c5cd59e3aa5c76e7f5

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 请求路径:例如智能鉴黄的路径为:/pulp。实际的请求路径详见各接口说明的请求包
RawQuery N 目前有此参数的只有鉴黄,鉴暴恐,以及鉴政治人物接口,分别为:qpulp/qterror/qpolitician, 不存在则不用添加 ?<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
以上内容是否对您有帮助?
  • 提交工单