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

Mik*_*zco 10 php rest amazon-s3 amazon-web-services

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

我的理解是:

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

身份验证标头创建行

然后,问题是:

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

Fré*_*nri 9

Acanonical request只是一个词汇而已。

规范请求和真实请求一样吗?

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

CanonicalRequest =
  HTTPRequestMethod + '\n' +
  CanonicalURI + '\n' +
  CanonicalQueryString + '\n' +
  CanonicalHeaders + '\n' +
  SignedHeaders + '\n' +
  HexEncode(Hash(RequestPayload))
Run Code Online (Sandbox Code Playgroud)

当然,如果你将这个严格传递到你的浏览器,它不会被理解,也不会被执行,所以它会被转换(使编码更好等......)

因此,例如,您将获得定义为的请求的规范表示

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))
Run Code Online (Sandbox Code Playgroud)

然后根据这个定义,系统将创建“真实”请求,意思是将针对服务器执行的请求

  • *“然后根据这个定义,系统将创建“真正的”请求,意思是将对服务器执行的请求”* 从这个?不,规范请求是请求元素的确定性表示,“规范”意味着当 S3 收到请求时,它可以从实际请求中重新生成这个相同的字符串,并计算您应该发送的签名,看看您是否做对了(这证明您正在使用与您的访问密钥 ID 匹配的秘密)。没有任何内容*来自*规范请求,因为它在步骤 2 中立即被散列和丢弃。 (3认同)