我正在尝试在AWS上创建一个lambda服务,并通过API网关从外部访问它,而不需要进行身份验证或限制。
为了简化事情,我现在将网关设置为模拟。
在API的Get方法中,授权设置为None
,API密钥为not required
。
当我尝试这样做时,我得到了{"message":"Forbidden"}
的错误信息(如果连接到实际的lambda服务,则也是相同的消息)。
如何使其可访问的建议?
我正在尝试在AWS上创建一个lambda服务,并通过API网关从外部访问它,而不需要进行身份验证或限制。
为了简化事情,我现在将网关设置为模拟。
在API的Get方法中,授权设置为None
,API密钥为not required
。
当我尝试这样做时,我得到了{"message":"Forbidden"}
的错误信息(如果连接到实际的lambda服务,则也是相同的消息)。
如何使其可访问的建议?
如果您将 API Key Required
选项设置为 true,请检查以下内容:
x-api-key
HTTP 标头参数传递给 AWS API Gateway。{"message":"Forbidden"}
。如果您使用自定义域名并忘记选择目标暂存区,您将收到 Forbidden
错误提示信息。
只需进入 自定义域名
,点击您的域名下的 编辑
,然后在 基础路径映射
下选择阶段。
我可能来晚了,但 API 网关提示“禁止访问”的原因之一是在 GET 操作中传递请求体数据。要解决这个问题,要么将资源改为 POST,要么不在请求体中传递数据。
https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users
(注意users
前面的dev
阶段)而是调用了https://9999xx9x99.execute-api.us-east-1.amazonaws.com/users
(没有阶段)。你期望得到404,但你会得到403。https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users
之后,调用https://9999xx9x99.execute-api.us-east-1.amazonaws.com/user
(这里是单数名词形式)你也会得到403,但会显示“缺少身份验证令牌”消息!我曾经遇到过类似的问题,解决方法如下:
为了简化事情,我没有设置任何授权或限制。
通过为每个阶段(开发、测试、生产等)添加基本路径映射,我成功地解决了这个问题。
在我的案例中,这是因为我使用了
托管-全部查看器(Managed-AllViewer)
请求策略。将其切换为
托管-用户代理引荐头部(Managed-UserAgentRefererHeaders)
问题得到了解决。
我的客户端发送了一个Accept-Encoding
头部,但CloudFront不允许。您可以通过创建自定义起源请求策略来验证此操作,选择“白名单”类型,尽管可从列表中选择Accept-Encoding
,但在创建策略时会收到错误信息:"The parameter Headers contains Accept-Encoding that is not allowed."
不幸的是,我没有找到相关文档。也不知道为什么不允许这样一个不显眼的标头。