2013-04-16 6 views
5

Meine Implementierung von AWS Antrag Authentifizierung in Google Go langAWS anfordern Authentifizierung: Encode-Header

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) 
} 

Ich gültige Ausgabe von Amazon bekommen, aber nur, wenn der Hash 'sha' enthält keine _ oder -

Arbeits

'WFKzWNQlZEyTC9JFGFyqdf8AYj54aBj5btxPIaGTDbM ='

Arbeiten

Nicht HTTP/1.1 403 Forbidden SignatureDoesNotMatch

'h-FIs7of_CJ7LusAoQPzSWVt9hlXF_5gCQgedn_85lk ='

Wie kodieren ich die AWS3-HTTPS-Header, so dass es entweder Umstand funktioniert? Nur wenn es relevant ist, kopiere ich und kopiere die Ausgabe in cURL. Ich plane, die Anfrage in Google Go zu implementieren, sobald ich es zuverlässig funktioniert habe.

+0

Plausibilitätsprüfung zu ändern: Sie haben laufen 'curl' mit' -V' nur um es zu überprüfen ist nicht curl Messing mit deinen Daten? –

+0

Ich habe dies in Go implementiert und hatte kein Glück, ich bekomme die gleichen Fehler/Erfolg, wenn der Hash nicht _ –

+1

enthält Hey, Entschuldigung für diesen alten Thread stoßen, aber ich versuche, dieses Auth-Token in einer anderen Sprache zu implementieren und ich versuche den Job von Hash zu verstehen. Ist es für das Salz? Ich verwende Objective-C. Prost ! –

Antwort

4

drehte ich heraus, dass ich brauchte von urlencoding zu StdEncoding

sha = base64.URLEncoding.EncodeToString(hash.Sum(nil)) 

zu

sha = base64.StdEncoding.EncodeToString(hash.Sum(nil)) 
Verwandte Themen