开发者社区> 问答> 正文

图像搜索的签名机制有哪些?

图像搜索的签名机制有哪些?

展开
收起
保持可爱mmm 2020-03-27 14:47:02 529 0
1 条回答
写回答
取消 提交回答
  • 图像搜索服务会对每个访问的请求进行身份验证,所以无论使用 HTTP 还是 HTTPS 协议提交请求,都需要在请求头中包含签名(Authorization)信息。图像搜索通过使用Access Key ID和Access Key Secret进行对称加密的方法来验证请求的发送者身份。Access Key ID和Access Key Secret 由阿里云官方颁发给访问者(可以通过阿里云官方网站申请和管理),其中Access Key ID用于标识访问者的身份;Access Key Secret是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密。 签名操作

    签名主要包含以下几部分内容:公共请求头(http协议header参数、阿里云协议header参数)、CanonicalizedResource(规范资源)、Body。

    首先计算body的MD5值,然后再对其进行base64编码,编码后的值设置到 Header中。
    使用请求中的Header参数构造规范化的Header字符串。
    
        headerStringToSign = 
            HTTP-Verb + "\n" +         //HTTP_Verb为POST或者GET
            Accept + “\n” +            //Accept为application/json
            Content-MD5 + "\n" +       //第1步中计算出来的MD5值
            Content-Type + "\n" +      //Content-Type值为application/octet-stream;chrset=utf-8
            Date + "\n" +              //Date值为GMT时间
            “x-acs-signature-method:HMAC-SHA1\n” + 
            “x-acs-signature-nonce:” + ${x-acs-signature-nonce} + "\n" +
            “x-acs-version:2018-01-20" + "\n";
    
    CanonicalizedResource 表示客户想要访问资源的规范描述,需要将子资源和qurey一同按照字典序,从小到大排列并以 & 为分隔符生成子资源字符串(?后的所有参数),示例如下。
    
        resourceStringToSign = 
            URI + "?instanceName=" + ${instanceName};
    
    将上两步构造的规范化字符串按照下面的规则构造成待签名的字符串。
    
        stringToSign = headerStringToSign + resourceStringToSign;
    
    按照 RFC2104的定义,计算待签名字符串StringToSign的 HMAC 值,按照 Base64 编码规则把上面的 HMAC 值编码成字符串,并在前面加上AccessKeyId,即得到签名值(Authorization),示例如下:
    
        Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) )
        Authorization = "acs " + AccessKeyId + ":" + Signature
    
        注意:计算签名时使用的 Key 就是您持有的Access Key Secret,使用的哈希算法是 SHA1。
    

    示例

    假定用户请求如下:

    curl -X POST 
         -H "date:Sat 27 Jan 2018 17:53:28 GMT" 
         -H "content-md5:MACiECZtnLiNkNS1v5ZCAA=1" 
         -H "content-type:application/x-www-form-urlencoded;charset=utf-8" 
         -H "x-acs-signature-method:HMAC-SHA1" 
         -H "x-acs-signature-nonce:123212345678231234" 
         -H "x-acs-version:2019-03-25"
         -H "accept:application/json" 
         -d "..." 
         "http://imagesearch.cn-shanghai.aliyuncs.com/v2/image/search"
    

    计算得到的stringToSign为:

    POST
    application/json
    MACiECZtnLiNkNS1v5ZCAA==
    application/x-www-form-urlencoded;charset=utf-8
    Sat 27 Jan 2018 19:54:26 GMT
    x-acs-signature-method:HMAC-SHA1
    x-acs-signature-nonce:123212345678231235
    x-acs-version:2019-03-25
    /v2/image/search
    

    假定 accessKeyId 为 testAccessKey,accessSecrect 为 testKeySecrect,计算得到的签名值为:

    acs testAccessKey:31nTIpResD/0C8gb+ChUeuvsxlw=
    

    最后将得到的签名值加入到 Header 的 Authorization 当中。

    2020-03-27 14:49:47
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
图像搜索与识别在大规模场景中的研究与实践 立即下载
重保场景及API安全指南 立即下载
《开放搜索统一召回引擎实践》 立即下载