2013-04-16 8 views
5

mia implementazione di AWS richiesta di autenticazione in Google Go langAWS richiesta di autenticazione: 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) 
} 

ricevo uscita valida da Amazon, ma solo quando hash il 'sha' non contiene _ o -

lavoro

'WFKzWNQlZEyTC9JFGFyqdf8AYj54aBj5btxPIaGTDbM ='

non funziona HTTP/1.1 403 Forbidden SignatureDoesNotMatch

'h-FIs7of_CJ7LusAoQPzSWVt9hlXF_5gCQgedn_85lk ='

Come faccio a codificare l'AWS3-HTTPS intestazione in modo che funziona in entrambe le circostanze? È incassile, è rilevante, attualmente sto copiando e incollando l'output in cURL. Ho intenzione di implementare la richiesta in Google Go una volta che ho funzionato in modo affidabile.

+0

sanità mentale: avete eseguito '' curl' con -V' solo per controllare che non è ricciolo Messing con i tuoi dati? –

+0

Ho finito per implementare questo in Go e non ho avuto fortuna, sto ottenendo gli stessi errori/successi quando l'hash non contiene _01 –

+1

Ehi, scusa per aver battuto questo vecchio thread ma sto cercando di implementare questo token di autenticazione in una lingua diversa e sto cercando di capire il lavoro di hash.Write? È per il sale? Sto usando Objective-C. Saluti ! –

risposta

4

ho spento avevo bisogno di cambiare da URLEncoding a StdEncoding

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

al controllo

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