AWS - 真正的规范要求是什么?

时间:2016-06-06 18:46:42

标签: php rest amazon-web-services amazon-s3

我试图直接使用来自亚马逊的S3服务的REST API,而我无法理解规范请求是什么。

我的理解是:

  • 您需要一个Authorization标头或查询字符串参数(我将使用标题)
  • 此Authorization标头包含散列HTTP请求(规范请求)
  • 此HTTP请求需要散列的有效负载,然后连接到更长的字符串。
  • 此字符串经过多次哈希处理。
  • 结果是身份验证标题。

Authentication header creation line

然后,问题是:

  • 规范请求与真实请求相同吗?
  • 规范请求字符串只进行一次,然后用于下一次请求?

1 个答案:

答案 0 :(得分:3)

canonical request只是一个词汇表。

  

规范请求与真实请求相同吗?

它是真实请求的表示;根据您的屏幕截图,它被定义为

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

当然,如果你将那个严格传递到你的浏览器中,它将无法被理解,它将不被执行,因此它将被转换(使编码更好等...)

因此,例如,您将获得定义为

的请求的规范表示
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))

然后从这个定义中,系统将创建“真实”请求,意味着将对服务器执行的请求