AWS - 什么是规范请求?

23

我正在尝试直接使用亚马逊的S3服务的REST API进行工作,但我不理解什么是规范请求。

我的理解是:

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

Authentication header creation line

那么,问题是:

  • 规范请求和真实请求是相同的吗?
  • 规范请求字符串只生成一次,然后在下一次请求中使用吗?
1个回答

12

规范请求只是一个词汇。

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

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

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

然后根据这个定义,系统将创建“真正”的请求,即将对服务器执行的请求。


4
根据这个定义,系统将创建“真正”的请求,即将针对服务器执行的请求。从这个定义中得出吗?不,规范请求是请求元素的确定性表示,“规范”意味着当S3收到请求时,它可以从实际请求重新生成此相同的字符串,并计算出您应该发送的签名,以查看您是否正确(这证明您正在使用与访问密钥ID匹配的密钥)。没有任何内容是从规范请求中派生出来的,因为它立即在步骤2中被散列和丢弃。 - Michael - sqlbot
规范请求必须具有相同的标头?标头中的日期(在规范和实际请求中)以及用于生成身份验证标头的日期呢?它们必须相同吗? - MikeVelazco
我如何通过编程生成规范形式? - Adarsh M Pallickal
在 API Gateway 中,您该从哪里找到类似于 API 的规范 URI? - Persistent Plants

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接