我正在尝试使用 AWS API Gateway 和 IAM 授权的一个小示例。 AWS API Gateway 生成以下端点:
https://xyz1234.execute-api.us-east-2.amazonaws.com/Users/users
使用 POST 操作且不带参数。
最初,我关闭了此 POST 方法的 IAM,并使用 Postman 验证了结果,它有效。
然后,我创建了一个新的 IAM 用户并将 AmazonAPIGatewayInvokeFullAccess 策略附加到该用户,从而授予调用任何 API 的权限。为 POST 方法启用 IAM。
然后我去了 Postman - 并添加了访问密钥、密钥、AWS 区域的授权作为us-east-2
和服务名称为execute-api
并尝试执行请求,但我收到 InvalidSignatureException 错误,返回代码为 403。
正文包含以下消息:
Signature expired: 20170517T062414Z is now earlier than 20170517T062840Z (20170517T063340Z - 5 min.)"
我缺少什么?
使用 AWS sigV4 签名的请求包含创建签名的时间戳。签名在创建后仅在短时间内有效。 (这限制了可以尝试重放攻击的时间。)
验证签名后,会将时间戳与当前时间进行比较。如果这表明签名不是最近创建的,则签名验证将失败并显示您提到的错误消息。
如果您在使用 WSL 的 Windows 上的 Docker 容器中启用此功能,那么通过运行以下命令可能有助于修复 WSL 时间wsl -d docker-desktop -e /sbin/hwclock -s
在 Powershell 中。您可以通过登录容器来预先验证情况是否如此
打字date
在终端中并将其与主机时间进行比较。
造成这种情况的一个常见原因是生成签名的主机上的本地时钟偏差超过几分钟。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)