【问题标题】:AWS - What a canonical request is really?AWS - 真正的规范请求是什么?
【发布时间】:2016-10-06 11:50:58
【问题描述】:

我正在尝试直接使用来自 Amazon 的 S3 服务的 REST API,但我不明白什么是规范请求。

我的理解是:

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

那么,问题是:

  • 规范请求与真实请求相同?
  • 规范请求字符串只生成一次,然后用于下一个请求?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • “那么根据这个定义,系统将创建“真正的”请求,这意味着将对服务器执行的请求” 从这个?不,规范请求是请求元素的确定性表示,“规范”意味着当 S3 收到请求时,它可以从实际请求中重新生成这个相同的字符串,并计算您应该发送的签名,看看您是否做对了(这证明您正在使用与您的访问密钥 ID 匹配的秘密)。没有任何内容来自规范请求,因为它在步骤 2 中立即被散列并丢弃。
    • 规范请求必须具有相同的标头?标头中的日期(在规范和真实请求中)和身份验证标头生成期间使用的日期怎么样?它们必须相同吗?
    • 如何以编程方式生成规范表单?
    • 在哪里可以找到 API 网关中的 api 的规范 uri?
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2012-04-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多