猿问

AWS 请求身份验证:编码标头

我在 Google Go lang 中实现 AWS 请求身份验证


package main


import "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 中实现请求。


米琪卡哇伊
浏览 167回答 1
1回答

慕无忌1623718

我原来需要从 URLEncoding 更改为 StdEncodingsha = base64.URLEncoding.EncodeToString(hash.Sum(nil))至sha = base64.StdEncoding.EncodeToString(hash.Sum(nil))
随时随地看视频慕课网APP

相关分类

Go
我要回答