2016-06-06 33 views
5

Sto provando a lavorare direttamente con l'API REST per il servizio S3 da Amazon e non capisco cosa sia una richiesta canonica.AWS - Che richiesta canonica è davvero?

Quello che ho capito è:

  • avete bisogno di un intestazione di autorizzazione o di query parametri di stringa (userò l'intestazione)
  • Questa intestazione di autorizzazione contiene una richiesta hash HTTP (la richiesta canonica)
  • Questa richiesta HTTP richiede un payload con hash e quindi viene concatenata a una stringa più lunga.
  • Questa stringa viene sottoposta a hashing più volte.
  • Il risultato è l'intestazione di autenticazione.

Authentication header creation line

Poi, le domande sono:

  • La richiesta canonica è lo stesso come il vero richiesta?
  • Una stringa di richiesta canonica viene eseguita una sola volta e quindi utilizzata nelle richieste successive?

risposta

2

A canonical request è una cosa solo un vocabolario.

La richiesta canonica è la stessa della richiesta reale?

È una rappresentazione della richiesta reale; secondo il vostro screenshot, è definito come

CanonicalRequest = 
    HTTPRequestMethod + '\n' + 
    CanonicalURI + '\n' + 
    CanonicalQueryString + '\n' + 
    CanonicalHeaders + '\n' + 
    SignedHeaders + '\n' + 
    HexEncode(Hash(RequestPayload)) 

, naturalmente, se si passa che il rigoroso nel browser, non verrà capito e non verrà eseguito in modo sarà trasformare (fare codifica bello ecc ...)

quindi ad esempio, si otterrà una rappresentazione canonica di richiesta definita come

CanonicalRequest = 
    "GET" + '\n' + 
    "http://s3.amazonaws.com/examplebucket" + '\n' + 
    URI-encode("marker")+"="+URI-encode("someMarker")+"&"+URI-encode("max-keys")+"="+URI-encode("20") + "&" +URI-encode("prefix")+"="+URI-encode("somePrefix") + '\n' + 
    Lowercase("host")+":"+Trim("s3.amazonaws.com")+"\n"+Lowercase("x-amz-<something>")+":"+Trim("<the_value>")+ '\n' + 
    "host;x-amz-<something (same as above)>" + '\n' + 
    HexEncode(Hash(RequestPayload)) 

Poi da questa definizione, il sistema creerà la richiesta di "reale", cioè quello che verrà eseguito sul server

+2

* "Quindi da questa definizione, il sistema creerà la richiesta" reale "che indica quella che verrà eseguita contro il server" * Da questo? No, la richiesta canonica è una rappresentazione deterministica degli elementi della richiesta, "canonica" che significa che quando S3 riceve la richiesta, può rigenerare questa stringa identica dalla richiesta effettiva e calcolare la firma che avresti dovuto inviare, per vedere se tu capito bene (il che dimostra che stai usando il segreto che corrisponde al tuo ID della chiave di accesso). Nulla viene derivato * da * la richiesta canonica, poiché viene immediatamente cancellata e scartata nel passaggio 2. –

+0

la richiesta canonica deve avere le stesse intestazioni? per quanto riguarda le date nelle intestazioni (in richieste canoniche e reali) e le date utilizzate durante la generazione dell'intestazione dell'autenticazione? devono essere uguali? – MikeVelazco

+0

Come posso generare una forma canonica in modo programmatico? –