Bug: APIGatewayProxyEventModel drops the Lambda authorizer context
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
阅读 APIGatewayEventAuthorizer,并检查 tests/events/apiGatewayProxyEventPrincipalId.json,将其中的 authorizer 字段与解析后的模型进行比较。首先检查解析器模型测试,并为 principalId、integrationLatency 以及 user_id 等自定义上下文键添加覆盖。完成的标准是模型保留这些值,同时现有的 Cognito authorizer 事件仍能正常解析。
由索引模型根据 Issue 内容生成。
描述
Expected Behaviour
When a REST API uses a Lambda authorizer, API Gateway puts the authorizer's principalId, the integrationLatency and every key from the authorizer's context map into requestContext.authorizer. APIGatewayProxyEventModel should keep them, so a handler can read something like a tenant ID the authorizer set. The Lambda authorizer output docs cover the context map.
Current Behaviour
APIGatewayEventAuthorizer only declares claims and scopes, so everything else in requestContext.authorizer is dropped. The repo's tests/events/apiGatewayProxyEventPrincipalId.json has this shape (principalId, integrationLatency and a custom user_id).
The APIGatewayProxyEvent data class already exposes these through principal_id, integration_latency and get_context(), and the TypeScript schema keeps them since aws-powertools/powertools-lambda-typescript#5749.
Code snippet
import json
from aws_lambda_powertools.utilities.parser import parse
from aws_lambda_powertools.utilities.parser.models import APIGatewayProxyEventModel
with open("tests/events/apiGatewayProxyEvent.json") as f:
event = json.load(f)
# What API Gateway sends when a Lambda authorizer returns principalId "user-123"
# and context {"tenantId": "t-9"}
event["requestContext"]["authorizer"] = {
"principalId": "user-123",
"integrationLatency": 42,
"tenantId": "t-9",
}
parsed = parse(event=event, model=APIGatewayProxyEventModel)
print(parsed.requestContext.authorizer)
claims=None scopes=None
Possible Solution
Declare the two fields API Gateway always sends and allow extra keys for the custom context:
class APIGatewayEventAuthorizer(BaseModel):
model_config = ConfigDict(extra="allow")
claims: dict[str, Any] | None = None
scopes: list[str] | None = None
principalId: str | None = None
integrationLatency: int | None = None
With that, the snippet prints principalId='user-123' integrationLatency=42 tenantId='t-9' and the custom keys are in model_extra. It only adds fields, so Cognito authorizer events parse the same as before.
I'm happy to send a PR with tests if that sounds good.
Steps to Reproduce
Run the snippet above from the repo root.
Powertools for AWS Lambda (Python) version
3.40.0
AWS Lambda function runtime
3.13
Packaging format used
PyPi
- 主要语言
- Python
- 星标
- 3.3k
- 派生
- 511
- 平均合并
- 3 天 8 小时
- 30 天内合并 PR
- 103
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
aws-powertools/powertools-lambda-python 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 82/100
aws-powertools/powertools-lambda-python#8800 ·
维护者通常 1 天内回复
-
Bug: child Logger without a level ignores its parent's log level since 3.6.0可能已有人在做 @saimcyber 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 68/100
aws-powertools/powertools-lambda-python#8778 · 2 条评论 ·
维护者通常 1 天内回复
-
Bug: POWERTOOLS_IDEMPOTENCY_DISABLED set to an empty or non-boolean value crashes every invocation可能已有人在做 @lechakrawarthy 于 11 天前认领。 未关闭bug good first issue help wanted idempotency
难度 2/5 1-3 小时 新手友好度 85/100
aws-powertools/powertools-lambda-python#8728 · 4 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
Bug: Redis layer fails the invocation instead of retrying when a record expires between SET NX and GET可能已有人在做 @coughlmao 于 11 天前认领。 未关闭bug good first issue help wanted idempotency
难度 2/5 1-3 小时 新手友好度 85/100
aws-powertools/powertools-lambda-python#8727 · 4 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
Bug: Redis orphan lock timeout ignores expires_after_seconds and is always 10 seconds可能已有人在做 @CJstate 于 11 天前认领。 未关闭bug good first issue help wanted idempotency
难度 2/5 1-3 小时 新手友好度 75/100
aws-powertools/powertools-lambda-python#8726 · 4 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
查看 aws-powertools/powertools-lambda-python 的全部 Issue
相似的 Issue
-
15-minutes 5-minutes algorithm any-language beginner-friendly c cpp csharp easy go good first issue hacktoberfest help wanted java javascript kotlin python rust swift typescript
难度 2/5 1-3 小时 新手友好度 78/100
Huerte/algo-solutions-python#254 ·
维护者通常 1 天内回复
-
难度 1/5 1-3 小时 新手友好度 86/100
MichaelYcJo/SpecSeal#1543 ·
-
size/s
难度 1/5 1 小时以内 新手友好度 90/100
sipyourdrink-ltd/bernstein#7179 ·
维护者通常 1 天内回复
-
good first issue help wanted python up-for-grabs
难度 2/5 1-3 小时 新手友好度 65/100
andrewsiah/agentswarm-data-tasks#309 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 84/100
维护者通常 1 天内回复