X-Amz-Expires 是对 AWS 请求的必需 header/parameter 吗?
Is X-Amz-Expires a required header/parameter for requests to AWS?
X-Amz-Expires
是必需的 header/parameter 吗?官方文档不一致,在some examples, while not in others中使用。
如果不需要,签名请求的默认过期值是多少?它是否等于 X-Amz-Expires
参数的最大可能值,即 604800 (seven days)?
文档(见上面的链接)仅在查询字符串中传递签名参数的上下文中讨论 X-Amz-Expires
参数。如果需要 X-Amz-Expires
参数,是否只需要在查询字符串中传递签名参数(而不是通过授权 header 传递它们)?
更新:
Introduction to AWS Security Processes 论文,第 17 页说
A request must reach AWS within 15 minutes of the
time stamp in the request. Otherwise, AWS denies the request.
现在我们在这里谈论什么时间戳?我的猜测是 X-Amz-Date
。如果我是正确的,那么会出现另一个问题:
X-Amz-Date
和 X-Amz-Expires
参数如何相互关联?对我来说,如果 X-Amz-Expire
不存在,请求过期算法会从 X-Amz-Date
时间戳回落到 15 分钟。
Is X-Amz-Expires
a required header/parameter?
X-Amz-Expires
仅与查询字符串身份验证一起使用,而不与 Authorization:
header.
一起使用
查询字符串身份验证没有默认值。它是必需参数,如果 X-Amz-Algorithm=AWS4-HMAC-SHA256
出现在查询字符串中但 X-Amz-Expires=...
不出现,服务将拒绝请求。
<Error>
<Code>AuthorizationQueryParametersError</Code>
...
Now what time stamp are we talking about here?
当与 Authorization:
header 一起使用时,它指的是 X-Amz-Date:
。因为 X-Amz-Date:
是签名算法输入的一部分,所以日期或时间的更改也会更改签名。提前或延迟 1 秒签名的 otherwise-identical 请求具有完全不同的签名。 AWS 基本上允许您的服务器时钟最多出现 15 分钟的错误,而不会破坏您对请求进行身份验证的能力。它不是后备或默认设置。是固定的window.
Authorization:
header-based 请求的 X-Amz-Date:
由 AWS 与它们的系统时间进行比较,这当然是与 UTC 同步的,如果这样,请求将被拒绝请求到达时,该值与 UTC 偏差超过 15 分钟。在时间检查之前不会发生与身份验证相关的其他验证。
查询字符串身份验证到期的验证涉及不同的逻辑:
X-Amz-Expires
不能是大于 604800 或小于 0 的值;否则,请求将立即被拒绝,无需进一步处理,包括一条与上述类似的消息。
根据 AWS 系统时钟,X-Amz-Date
不得超过未来 15 分钟。错误是 Request is not yet valid
.
X-Amz-Date
不得超过 X-Amz-Expires
过去的秒数,相对于 AWS 系统时钟,并且不适用 15 分钟容差。错误是 Request has expired
.
如果出现这些情况中的任何一个,则不会对签名进行进一步验证,因此这些消息不会根据签名的有效性而改变。这个先检查一下。
此外,X-Amz-Date:
最左边的 8 个字符必须与 Authorization:
header 的 Credential
组件的日期部分匹配。日期本身对与凭据的差异零容忍(因此,在签名时,不要两次读取您的系统时间,否则您可能会在午夜 UTC 左右生成偶尔无效的签名)。
最后,请求在处理过程中不会过期。如果您使用任一签名方法发送请求,该请求在到达时被视为有效但很快就会过期,则始终允许 运行 完成——例如,大型 S3 下载或 EBS 快照创建请求将不会启动,然后无法继续,因为在 AWS 端请求已经启动时到期计时器被触发。如果操作在请求时获得授权,则它会继续并照常成功。
X-Amz-Expires
是必需的 header/parameter 吗?官方文档不一致,在some examples, while not in others中使用。如果不需要,签名请求的默认过期值是多少?它是否等于
X-Amz-Expires
参数的最大可能值,即 604800 (seven days)?文档(见上面的链接)仅在查询字符串中传递签名参数的上下文中讨论
X-Amz-Expires
参数。如果需要X-Amz-Expires
参数,是否只需要在查询字符串中传递签名参数(而不是通过授权 header 传递它们)?
更新:
Introduction to AWS Security Processes 论文,第 17 页说
A request must reach AWS within 15 minutes of the time stamp in the request. Otherwise, AWS denies the request.
现在我们在这里谈论什么时间戳?我的猜测是 X-Amz-Date
。如果我是正确的,那么会出现另一个问题:
X-Amz-Date
和X-Amz-Expires
参数如何相互关联?对我来说,如果X-Amz-Expire
不存在,请求过期算法会从X-Amz-Date
时间戳回落到 15 分钟。
Is
X-Amz-Expires
a required header/parameter?
X-Amz-Expires
仅与查询字符串身份验证一起使用,而不与 Authorization:
header.
查询字符串身份验证没有默认值。它是必需参数,如果 X-Amz-Algorithm=AWS4-HMAC-SHA256
出现在查询字符串中但 X-Amz-Expires=...
不出现,服务将拒绝请求。
<Error>
<Code>AuthorizationQueryParametersError</Code>
...
Now what time stamp are we talking about here?
当与 Authorization:
header 一起使用时,它指的是 X-Amz-Date:
。因为 X-Amz-Date:
是签名算法输入的一部分,所以日期或时间的更改也会更改签名。提前或延迟 1 秒签名的 otherwise-identical 请求具有完全不同的签名。 AWS 基本上允许您的服务器时钟最多出现 15 分钟的错误,而不会破坏您对请求进行身份验证的能力。它不是后备或默认设置。是固定的window.
Authorization:
header-based 请求的 X-Amz-Date:
由 AWS 与它们的系统时间进行比较,这当然是与 UTC 同步的,如果这样,请求将被拒绝请求到达时,该值与 UTC 偏差超过 15 分钟。在时间检查之前不会发生与身份验证相关的其他验证。
查询字符串身份验证到期的验证涉及不同的逻辑:
X-Amz-Expires
不能是大于 604800 或小于 0 的值;否则,请求将立即被拒绝,无需进一步处理,包括一条与上述类似的消息。
根据 AWS 系统时钟,X-Amz-Date
不得超过未来 15 分钟。错误是Request is not yet valid
.X-Amz-Date
不得超过X-Amz-Expires
过去的秒数,相对于 AWS 系统时钟,并且不适用 15 分钟容差。错误是Request has expired
.
如果出现这些情况中的任何一个,则不会对签名进行进一步验证,因此这些消息不会根据签名的有效性而改变。这个先检查一下。
此外,X-Amz-Date:
最左边的 8 个字符必须与 Authorization:
header 的 Credential
组件的日期部分匹配。日期本身对与凭据的差异零容忍(因此,在签名时,不要两次读取您的系统时间,否则您可能会在午夜 UTC 左右生成偶尔无效的签名)。
最后,请求在处理过程中不会过期。如果您使用任一签名方法发送请求,该请求在到达时被视为有效但很快就会过期,则始终允许 运行 完成——例如,大型 S3 下载或 EBS 快照创建请求将不会启动,然后无法继续,因为在 AWS 端请求已经启动时到期计时器被触发。如果操作在请求时获得授权,则它会继续并照常成功。