签名&鉴权 一、获取AKSK 1. 登录CDN+ IAM,地址:vip.ctcdn.cn 。 2. 在个人中心AccessKey管理页面,点击新增按键。 3. 选择对应的工作区并确定,此时你可以查看到AccessKey已生成。 4. 选中密钥,点击查看。为保障安全,需要填写手机验证码。验证通过后,点击显示SK,即可查看详情,并支持复制和发送邮箱操作。 二、在httpclient的请求头增加3个字段,分别是eopdate、ctyuneoprequestid、EopAuthorization。 1.构造eopdate 。该字段的格式是“yyyymmddTHHMMSSZ”,即:年月日T时分秒Z”,示例:eopdate:20211221T163614Z。 2.构造ctyuneoprequestid 。该字段是uuid,32位随机数。示例:27cfe4dce64045f692ca492ca73e8680 3.构造EopAuthorization 。按以下步骤进行: 步骤一:构造代签字符串sigture 。 sigture 需要进行签名的Header排序后的组合列表+ " n " + 排序的query + " n " +toHex(sha256(原封的body)) 1)需要进行签名的Header排序后的组合列表:将ctyuneoprequestid、eopdate以 “headername:headervalue”的形式、以“n ”作为每个header的结尾符、以英文字母表作为headername的排序依据将它们拼接起来。 注意 注意:EOP强制要求ctyuneoprequestid、eopdate必须进行签名。其他字段是否需要签名看自身需求。 2)排序的query:query以&作为拼接,key和值以连接,排序规则使用26个英文字母的顺序来排序,Query参数全部都需要进行签名 3)toHex(sha256(原封的body)):传进来的body参数进行sha256摘要,对摘要出来的结果转十六进制 示例1: 假设query 为空 ,原封body内容:{"productcode": "008", "taggroup": "Yppgroup1702950925", "tag": "1702950925yPPtag1"} 需要进行签名的Header排序后的组合列表为: 1)ctyuneoprequestid:27cfe4dce64045f692ca492ca73e8680 2)eopdate:20220525T160752Z 3)body参数做sha256摘要后转十六进制为:59fc6acc115298cbac86cb188f995f7804ff6633a6d6e87acab7a9131bdabc66 则sigture为: ctyuneoprequestid:27cfe4dce64045f692ca492ca73e8680neopdate:20220525T160752Znnn59fc6acc115298cbac86cb188f995f7804ff6633a6d6e87acab7a9131bdabc66 示例2: 假设query 为:aa1&bb2 ,原封body内容为空 需要进行签名的Header排序后的组合列表为: 1)ctyuneoprequestid:27cfe4dce64045f692ca492ca73e8680 2)eopdate:20220525T160752Z 3、body参数做sha256摘要后转十六进制为:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 则sigture为: ctyuneoprequestid:27cfe4dce64045f692ca492ca73e8680neopdate:20220525T160930Znnaa1&bb2ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 步骤二:构造动态秘钥kdate 。 1)eopdate:yyyymmddTHHMMSSZ(20211221T163614Z)(年月日T时分秒Z) 2)Ktime:使用eopdate作为数据,sk作为密钥,算出ktime。 Ktime hmacSha256(eopdate,sk) 3)kAk:使用ak作为数据,ktime作为密钥,算出kAk。 kAk hmacsha256(ak,ktime) 4)kdate:使用eopdate的年月日值作为数据,kAk作为密钥,算出kdate。 kdate hmacsha256(eopdate,kAk) 步骤三: 构造Signature 。使用kdate作为密钥、sigture作为数据,将其得到的结果进行base64编码得出Signature Signature构造签名的方法: 1)hmacsha256(sigture,kdate) 2)将上一步的结果进行base64加密得出Signature 步骤四:构造EopAuthorization 。 1)Headers:将需要进行签名的请求头字段以 “headername”的形式、以“;”作为间隔符、以英文字母表作为headername的排序依据将它们拼接起来。 假设需要将ctyuneoprequestid、eopdate进行签名,则Headers ctyuneoprequestid;eopdate。 2)EopAuthorization值为:ak Headersxxx Signaturexxx。 注意 ak、Headers、Signature之间以空格隔开。 例如:EopAuthorization:ak Headersctyuneoprequestid;eopdate SignatureZq0Wodhwa7ShCKhQWy49MoOm3r6/tB1rBTlp+vjRkSY 如果需要进行签名的Header不止默认的ctyuneoprequestid和eopdate,那么需要在httpclient的请求头部中加上,并且EopAuthorization中也需要增加。 三、 签名示例 { "host": "cdnapiglobal.ctapi.ctyun.cn", "Eopdate": "20211221T163614Z", "ctyuneoprequestid": "27cfe4dce64045f692ca492ca73e8680", "EopAuthorization": "e3e86563b0548543c128bcd2ea998167 Headersctyuneoprequestid;eopdate SignatureZq0Wodhwa7ShCKhQWy49MoOm3r6/tB1rBTlp+vjRkSY", "ContentType": "application/json;charsetUTF8" }