Go语言AWS4-HMAC-SHA256签名生成问题:kSigningSum异常求助
问题诊断与修复
核心错误:签名密钥生成最后一步参数完全颠倒
你在生成kSigningSum的最后一步,把HMAC的密钥和输入值搞反了。AWS要求的最后一步是:用前一步生成的kServiceSum作为密钥,对字符串"aws4_request"执行HMAC-SHA256计算,而你的代码正好反过来了。
错误代码片段
// 错误:把"aws4_request"作为密钥,kServiceSum作为输入 kSigning := hmac.New(sha256.New, []byte("aws4_request")) kSigning.Write(kServiceSum) kSigningSum := kSigning.Sum(nil)
修正后的代码
// 正确:用kServiceSum作为密钥,对"aws4_request"做HMAC kSigning := hmac.New(sha256.New, kServiceSum) kSigning.Write([]byte("aws4_request")) kSigningSum := kSigning.Sum(nil)
额外注意点
你代码中
signatureSumHexed只初始化了切片,但没有执行编码操作,需要补充:hex.Encode(signatureSumHexed, signatureSum)否则签名值会是空的,导致认证失败。
你注释里写的逻辑用的是
"iam"作为服务名,但代码里用的是"execute-api"——如果你的stringToSign是正确的,那这里的服务名必须和stringToSign以及credentialScope中的服务名完全一致,这点要确保。
内容的提问来源于stack exchange,提问作者Caner Çetin
相关产品推荐
相关产品推荐

