对象存储

  • 对象存储 > 常见问题 > 七牛鉴权QiniuToken

    七牛鉴权QiniuToken

    最近更新时间:2019-09-11 17:27:16

    生成七牛鉴权管理凭证的字符串(QiniuToken)的详细过程,共三步。
    其他: 有关上传凭证下载凭证的构造请参考各自的文档

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

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

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

    具体步骤如下:

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

    2)点击[个人面板],选择密钥管理,进入七牛的密钥管理页面,
    https://dn-odum9helk.qbox.me/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 请求路径。实际的请求路径详见各接口说明的请求包
    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
    
    以上内容是否对您有帮助?
  • Qvm free helper
    Close