Is X-Amz-Expires
必需的标头/参数?官方文档不一致,用在一些例子 http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html,虽然不在others http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html.
如果不需要,签名请求的默认过期值是多少?它是否等于最大可能值X-Amz-Expires
参数,即604800(7天) http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html?
该文档(参见上面的链接)讨论了X-Amz-Expires
仅在查询字符串中传递签名参数的上下文中使用参数。如果X-Amz-Expires
参数是必需的,是否仅在查询字符串中传递签名参数时才需要(而不是通过授权标头传递它们)?
Update:
AWS 安全流程简介 https://d0.awsstatic.com/whitepapers/Security/Intro_Security_Practices.pdf纸,第 17 页说
请求必须在 15 分钟内到达 AWS
请求中的时间戳。否则,AWS 会拒绝该请求。
现在我们在这里谈论什么时间戳?我的猜测是X-Amz-Date
。如果我是对的,那么另一个问题就会出现:
- How do
X-Amz-Date
and X-Amz-Expires
参数之间有什么关系吗?对我来说,这听起来像是请求过期算法从 15 分钟回退到X-Amz-Date
时间戳,如果X-Amz-Expire
不存在。
Is X-Amz-Expires
必需的标头/参数?
X-Amz-Expires
仅与查询字符串身份验证一起使用,而不与Authorization:
header.
查询字符串身份验证没有默认值。这是必需的参数,如果出现以下情况,服务将拒绝请求X-Amz-Algorithm=AWS4-HMAC-SHA256
存在于查询字符串中,但是X-Amz-Expires=...
is not.
<Error>
<Code>AuthorizationQueryParametersError</Code>
...
现在我们在这里谈论什么时间戳?
这是指X-Amz-Date:
当与Authorization:
标头。因为X-Amz-Date:
是签名算法输入的一部分,日期或时间的更改也会更改签名。早或晚 1 秒签名的其他方面相同的请求具有完全不同的签名。 AWS 本质上允许您的服务器时钟误差最多 15 分钟,而不会破坏您验证请求的能力。这不是后备或默认。这是一个固定的窗口。
The X-Amz-Date:
of Authorization:
AWS 将基于标头的请求与其系统时间进行比较,系统时间当然与 UTC 同步,如果请求到达时该值与 UTC 偏差超过 15 分钟,则请求将被拒绝。在时间检查之前不会发生与身份验证相关的其他验证。
查询字符串身份验证过期的验证涉及不同的逻辑:
-
X-Amz-Expires
不得大于 604800 或小于 0 的值;否则,该请求将立即被拒绝,而不进行进一步处理,包括类似于上述消息的消息。
-
X-Amz-Date
根据 AWS 系统时钟,未来时间不得超过 15 分钟。错误是Request is not yet valid
.
-
X-Amz-Date
不得超过X-Amz-Expires
过去的秒数,相对于 AWS 系统时钟,并且不适用 15 分钟容差。错误是Request has expired
.
如果发生任何这些情况,则不会对签名进行进一步验证,因此这些消息不会根据签名的有效性而改变。这是首先检查的。
另外,您的最左边的 8 个字符X-Amz-Date:
必须与您的日期部分匹配Credential
的组成部分Authorization:
标头。日期本身对凭证差异的容忍度为零(因此,在签名时,不要读取系统时间两次,否则您可能会在 UTC 午夜左右偶尔生成无效签名)。
最后,请求在处理过程中不会过期。如果您使用任一签名方法发送请求,而该签名方法在到达时被视为有效,但很快就会过期,则始终允许该请求运行完成——例如,大型 S3 下载或 EBS 快照创建请求将不会启动,然后无法继续,因为到期计时器在 AWS 端已启动请求时触发。如果该操作在请求时获得授权,则该操作会正常继续并成功。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)