AWS API 网关禁止连续请求
AWS API Gateway forbids consecutive requests
我正在使用 AWS API 网关和 Lambda 将图像上传到 S3 存储桶。我已设置 API 网关以使用自定义授权方。
我目前正在 JSON 有效负载中传递 base64
编码图像(不理想,但目前它可以满足我的需要)。
我就是这样调用我的 API(请注意,您需要安装 jq
和 httpie
才能发出此调用):
base64 <my_image> | jq -R '{image: .}' | http https://<api_gw_url>/dev/upload 'Authorization:Bearer <my_auth_token>'
如果我多次发出相同的请求,API 网关 returns 第一次是 200(并且文件已正确上传),但对于任何后续请求(具有相同的身份验证) token to the same URI) a 403 Forbidden
返回,正文中有以下错误:
{
"Message": "User is not authorized to access this resource"
}
大约 5 分钟后,请求再次被接受:/
我在文档中没有发现任何关于默认速率限制的提及。
我也尝试添加一个 Usage Plan
,关联一个 API 键,以便能够调整速率限制,但没有任何区别。
还有其他人遇到过这种情况吗?
编辑
只是想添加更多关于我的架构的信息,以确保问题得到更好的解释。
我的设置包括一个 API 网关、一个负责 JWT 授权的 Lambda 和另一个负责上传到 S3 的 Lambda。发生的情况如下:
第一次通话
>base64 <my_image> | jq -R '{image: .}' | http https://<api_gw_url>/dev/upload 'Authorization:Bearer <my_auth_token>'
请求命中:
- API 网关
- 授权 Lambda
- 文档上传 Lambda
响应代码:200
第二次调用(在第一次调用后不到 5 分钟发出)
>base64 <my_image> | jq -R '{image: .}' | http https://<api_gw_url>/dev/upload 'Authorization:Bearer <my_auth_token>'
请求命中:
- API 网关
请求未命中:
- 授权 Lambda
- 文档上传 Lambda
响应代码:403
事实证明这是我代码中的错误和对 API 网关工作方式的误解的混合。
我遇到的问题如下:
- 第一个调用:PUT /entity/UUID1 和
JWT_Token_1
- 访问为
JWT_Token_1
缓存的 UUID1
的策略
- 第二次调用:PUT /entity/UUID2 和
JWT_Token_1
- 检索
JWT_Token_1
的缓存策略, 但是 尝试使用 UUID2
然后 "User is not authorized to access this resource"[=35 调用资源=]
我基本上是重复使用相同的 JWT 令牌来访问不同的资源。在我的用例中,这是不允许的。
我正在使用 AWS API 网关和 Lambda 将图像上传到 S3 存储桶。我已设置 API 网关以使用自定义授权方。
我目前正在 JSON 有效负载中传递 base64
编码图像(不理想,但目前它可以满足我的需要)。
我就是这样调用我的 API(请注意,您需要安装 jq
和 httpie
才能发出此调用):
base64 <my_image> | jq -R '{image: .}' | http https://<api_gw_url>/dev/upload 'Authorization:Bearer <my_auth_token>'
如果我多次发出相同的请求,API 网关 returns 第一次是 200(并且文件已正确上传),但对于任何后续请求(具有相同的身份验证) token to the same URI) a 403 Forbidden
返回,正文中有以下错误:
{
"Message": "User is not authorized to access this resource"
}
大约 5 分钟后,请求再次被接受:/
我在文档中没有发现任何关于默认速率限制的提及。
我也尝试添加一个 Usage Plan
,关联一个 API 键,以便能够调整速率限制,但没有任何区别。
还有其他人遇到过这种情况吗?
编辑
只是想添加更多关于我的架构的信息,以确保问题得到更好的解释。
我的设置包括一个 API 网关、一个负责 JWT 授权的 Lambda 和另一个负责上传到 S3 的 Lambda。发生的情况如下:
第一次通话
>base64 <my_image> | jq -R '{image: .}' | http https://<api_gw_url>/dev/upload 'Authorization:Bearer <my_auth_token>'
请求命中:
- API 网关
- 授权 Lambda
- 文档上传 Lambda
响应代码:200
第二次调用(在第一次调用后不到 5 分钟发出)
>base64 <my_image> | jq -R '{image: .}' | http https://<api_gw_url>/dev/upload 'Authorization:Bearer <my_auth_token>'
请求命中:
- API 网关
请求未命中:
- 授权 Lambda
- 文档上传 Lambda
响应代码:403
事实证明这是我代码中的错误和对 API 网关工作方式的误解的混合。
我遇到的问题如下:
- 第一个调用:PUT /entity/UUID1 和
JWT_Token_1
- 访问为
JWT_Token_1
缓存的
UUID1
的策略 - 访问为
- 第二次调用:PUT /entity/UUID2 和
JWT_Token_1
- 检索
JWT_Token_1
的缓存策略, 但是 尝试使用UUID2
然后 "User is not authorized to access this resource"[=35 调用资源=]
- 检索
我基本上是重复使用相同的 JWT 令牌来访问不同的资源。在我的用例中,这是不允许的。