鉴权签名及示例(V4版本) 签名校验生成过程 1. 从请求鉴权头Authorization中依次解析出生成签名所需各基本元素信息: java accessKey dateStamp regionName serviceName SignedHeaders Signature 2. 根据SignedHeaders把参与签名的请求头headerName按自然序排列并转为小写后用;连接进行拼接得到canonicalizedHeaderNames。 java canonicalizedHeaderNamesheaderName1;headerName2;headerName3... 3. 依据SignedHeaders中请求头名称从请求中取出对应请求头值,按字母自然序排列按如下规则生成canonicalizedHeaders。 java headerName1:headerValue1+"n"+headerName2:headerValue2... 4. 将请求?后面的入参按自然序排列并按如下规则生成canonicalizedQueryParameters。 java UriEncode(QueryParameter1)UriEncode(value)&UriEncode(QueryParameter2)UriEncode(value)... 5. 按如下规则生成canonicalRequest。 java httpMethod + "n" + canonicalUri + "n" + canonicalizedQueryParameters+ "n" +canonicalizedHeaders+ "n" + canonicalizedHeaderNames+ "n" + bodyHash 其中bodyHash为HMACSHA256(""),即e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 6. 按如下规则生成stringToSign。 java AWS4HMACSHA256+"n"+{xamzdate}+"n"+dateStamp + "/" + regionName + "/" + serviceName + "/" + aws4request + "n"+Hex(HMACSHA256(canonicalRequest)) 7. 最后按如下算法生成最终的signature。 java DateKeyHMACSHA256("AWS4"+{SecrectKey}, dateStamp) DateRegionKeyHMACSHA256(DateKey, regionName) DateRegionServiceKeyHMACSHA256(DateRegionKey, serviceName) SigningKeyHMACSHA256(DateRegionServiceKey, "aws4request") signatureHex(HMACSHA256(SigningKey, stringToSign))