我在 Google Go lang 中實現 AWS 請求身份驗證package mainimport "fmt"import "crypto/hmac"import "crypto/sha256"import "time"import "encoding/base64"func main() { AWSAccessKeyId := "MHAPUBLICKEY" AWSSecretKeyId := "MHAPRIVATEKEY" sha256 := sha256.New time := time.Now().UTC().Format(time.ANSIC) hash := hmac.New(sha256, []byte(AWSSecretKeyId)) hash.Write([]byte(time)) sha := base64.URLEncoding.EncodeToString(hash.Sum(nil)) fmt.Println("Date", time) fmt.Println("Content-Type","text/xml; charset=UTF-8") fmt.Println("AWS3-HTTPS AWSAccessKeyId=" + AWSAccessKeyId + ",Algorithm=HmacSHA256,Signature=" + sha)}我從亞馬遜獲得有效輸出,但僅當“sha”哈希不包含任何 _ 或 -在職的'WFKzWNQlZEyTC9JFGFyqdf8AYj54aBj5btxPIaGTDbM='不工作 HTTP/1.1 403 Forbidden SignatureDoesNotMatch'h-FIs7of_CJ7LusAoQPzSWVt9hlXF_5gCQgedn_85lk='如何對 AWS3-HTTPS 標頭進行編碼,使其在任何一種情況下都能正常工作?以防萬一它是相關的,我目前正在將輸出復制并粘貼到 cURL 中。一旦我讓它可靠地工作,我計劃在 Google Go 中實現請求。
1 回答

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
我原來需要從 URLEncoding 更改為 StdEncoding
sha = base64.URLEncoding.EncodeToString(hash.Sum(nil))
至
sha = base64.StdEncoding.EncodeToString(hash.Sum(nil))
- 1 回答
- 0 關注
- 185 瀏覽
添加回答
舉報
0/150
提交
取消