理解API Gateway授权缓存(REST)
文章目录
当使用 API 的资源和方法,存在一些常见的误解。本文将详细解析这些问题,并提供最佳实践。
设置 Lambda 授权器缓存
在 API 网关中,有两种类型的自定义授权器:
- TOKEN 授权器:这是最简单的选项,通常通过
Authorization标头传递一个不记名的 JWT 令牌来验证请求。 - REQUEST 授权器:通过组合标头、查询字符串、
stageVariables和$context变量来接收调用者的身份信息。相比 TOKEN 授权器,这种方式可以传递更多关于请求的信息到 Lambda 函数。
以下是控制台中这两种授权器的对比截图:
API 网关 Lambda 授权器对比
无论是 TOKEN 授权器还是 REQUEST 授权器,都可以选择启用授权缓存,其 TTL(生存时间)范围为 0 到 3600 秒(60 分钟)。需要注意的是,3600 秒是硬性限制,无法增加。
缓存的密钥由定义的令牌源或身份源决定。
缓存中存储了什么?
缓存中存储的是 Lambda 授权器函数的输出结果,其中包括用于决定是否允许或拒绝调用者的 policyDocument。例如,以下输出会拒绝对账户 123456789012 的 API ymy8tbxw7b 的开发阶段中 GET 方法的调用。
缓存的作用范围
缓存的作用范围是每个 API 阶段,而不是按资源或方法进行缓存。这是一个常见的误解。例如,对于 prod 阶段,以下调用将返回相同的缓存授权器响应:
GET https://myapi.com/prod/pets/cats(触发 Lambda,生成策略并存储在缓存中)GET https://myapi.com/prod/pets/cats(从缓存中返回策略)GET https://myapi.com/prod/pets/dogs(从缓存中返回策略)POST https://myapi.com/prod/pets/cats(从缓存中返回策略)
如果需要刷新整个 API 阶段的缓存,可以使用 FlushStageAuthorizersCache API。例如,通过 AWS CLI 执行以下命令:
aws apigateway flush-stage-authorizers-cache --rest-api-id 1234124 --stage-name dev
常见错误及其原因
开发者常犯的一个错误是仅返回当前调用的特定资源或方法的 allow 语句。然而,由于缓存会应用于整个阶段,因此后续调用不同资源或方法时,可能会返回错误的策略,导致隐式拒绝。例如:
- 用户调用
https://myapi.com/prod/pets/cats,生成的策略允许访问/pets/cats并存储在缓存中。 - 用户调用
https://myapi.com/prod/pets/dogs,由于缓存的策略未包含/pets/dogs,用户被隐式拒绝。
如果禁用缓存,Lambda 授权器会在每次调用时动态生成策略,从而避免上述问题。
正确处理缓存的两种方法
为了正确处理缓存,可以采用以下两种方法:
-
在
policyDocument中包含 API 阶段的所有资源和方法这种方法可以通过使用通配符(如
*)来实现。例如,允许访问所有资源和方法。 -
在标识源中包含
$context变量配置标识源时,将
httpMethod和resourcePath添加到$context中。这样可以为每个方法和资源创建独立的缓存键。
关于 $context 缓存键的更多信息
基于 REQUEST 授权器,可以向身份源添加 $context 变量。这允许将 httpMethod 和 resourcePath 用作缓存键的一部分,从而为每个方法和资源创建独立的缓存。例如:
GET https://myapi.com/prod/pets/cats(触发 Lambda,生成策略并存储在缓存中)GET https://myapi.com/prod/pets/cats(从缓存中返回策略)GET https://myapi.com/prod/pets/dogs(触发 Lambda,生成策略并存储在缓存中)POST https://myapi.com/prod/pets/cats(触发 Lambda,生成策略并存储在缓存中)
以下是相关截图:

TOKEN 授权器是否支持 $context 缓存键?
不支持。$context 缓存键方法仅适用于 REQUEST 授权器。如果使用的是 TOKEN 授权器,需要确保返回的 policyDocument 包含客户端可能在缓存 TTL 内调用的所有资源和方法。
解决方案
-
明确列出所有允许/拒绝的操作
这种方法安全性较高,但逻辑复杂,可能会受到 8KB 策略大小限制的影响。
-
使用通配符
在策略声明中使用通配符(如
*),可以简化逻辑。然而,这种方法的安全性较低,可能会导致无意中允许访问新增的资源。
有关 API 调用策略的详细信息,请参考 API 网关中执行 API 的 IAM 策略语句参考。
通过本文的解析,相信您已经对 API 网关授权缓存的工作原理、常见误区以及最佳实践有了清晰的认识。正确配置缓存不仅可以提升性能,还能避免潜在的安全问题。
原文链接: https://tmmr.uk/post/api-gateway/api-gateway-auth-caching/
最新文章
- 如何在 Node.js 中构建 gRPC API
- Link支付怎么注册?一站式指南
- 2025年最新图像算法面试题:图像识别、CNN算法与实战项目解析
- 如何获取 Pexels 开放平台 API Key 密钥(分步指南)
- 使用 FastAPI 和 RabbitMQ 构建端到端微服务:综合指南
- DeepSeek+dify 工作流应用,自然语言查询数据库信息并展示
- 医疗机构如何防范API漏洞威胁
- Swagger与API文档:如何使用Swagger实现API文档自动化生成
- REST API:定义、工作原理、优点与缺点
- Yahoo Finance API – 完整指南
- 使用 DEEPSEEK AI 构建应用程序:它能(和不能)做什么
- 如何获取 Figma 开放平台 API Key 密钥(分步指南)