簽名應用及示例(V2版本)
更新時間 2024-08-20 11:16:27
最近更新時間: 2024-08-20 11:16:27
分享文章
認證鑒權
請求的認證鑒權通常是通過AK/SK對請求進行簽名,在請求時將簽名信息添加到消息頭,從而通過身份認證,加密調用請求。
- AK(Access Key ID):訪問密鑰ID。與私有訪問密鑰關聯的唯一標識符;訪問密鑰ID和私有訪問密鑰一起使用,對請求進行加密簽名。
- SK(Secret Access Key):私有訪問密鑰。與訪問密鑰ID結合使用,對請求進行加密簽名,可標識發送方,并防止請求被修改。
使用AK/SK認證時,您可以基于簽名算法使用AK/SK對請求進行簽名。
簽名生成規則
signature形式
AWS {access-key}:{hash-of-secret-and-resource}
- access-key:填入真實的訪問密鑰ID;
- hash-of-secret-and-resource:通常是由請求uri、method、簽名生成時間等和對應的secret key組合而成的字符串經hash(SHA1)再base64之后的結果;
注意:在 {access-key} 和 {hash-of-secret-and-resource} 之間有一個冒號【:】。
簽名生成步驟
生成簽名通常需要以下這些步驟:
- 獲取請求方法http Method,如 PUT;
- 獲得GMT格式的簽名生成時間DateValue,如
Mon, 06 May 2024 08:51:53 +0000; - 獲取請求完整uri,如 /testbucket/testobj;
- 將以上信息按指定格式拼接生成最終參與簽名的完整字符串stringToSign=
${httpMethod}\n\n\n${DateValue}\n${uri},如PUT\n\n\nMon, 06 May 2024 08:51:53 +0000\n/testbucket/testobj; - 將sk作為秘鑰使用HmacSHA1對上述stringToSign進行hash;
- 對上述hash值進行base64編碼得到hash-of-secret-and-resource值,如 w/dZLIS06uPsWX3vIRI+cruX0VM=;
- 按AWS {access-key}:{hash-of-secret-and-resource}進行拼接得到最終signature鑒權頭
SHELL實例
以上傳對象為例:
#!/bin/sh
ak="訪問密鑰ID,請從媒體存儲控制臺-密鑰管理-密鑰管理TAB獲取"
sk="私有訪問密鑰,請從媒體存儲控制臺-密鑰管理-密鑰管理TAB獲取"
endpoint="//stor-api.xstore.daliqc.cn"
uri="/testbucket/testobj"
httpMethod="PUT"
DateValue="$(LC_TIME=C TZ=GMT date +'%a, %d %b %Y %H:%M:%S GMT')"
Source="localfile"
stringToSign="${httpMethod}\n\n\n${DateValue}\n${uri}"
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${sk} -binary | base64`
Param="-L -i -v -X PUT -T ${Source}"
echo "curl ${Param} -H \"Date: ${DateValue}\" -H \"Authorization: AWS ${ak}:${signature}\" \"${endpoint}${uri}\""
sh -c "curl ${Param} -H 'Date: ${DateValue}' -H 'Authorization: AWS ${ak}:${signature}' '${endpoint}${uri}'"