Bug: APIGatewayProxyEventModel drops the Lambda authorizer context

Aberta Para iniciantes
#8,801 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
78/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
aws, python
Domínio
backend, cloud

Direção de pesquisa

Leia APIGatewayEventAuthorizer e examine tests/events/apiGatewayProxyEventPrincipalId.json para comparar os campos do authorizer com o modelo analisado. Comece verificando os testes do modelo do parser e adicione cobertura para principalId, integrationLatency e chaves de contexto personalizadas, como user_id. O trabalho estará concluído quando o modelo preservar esses valores e os eventos existentes do authorizer do Cognito continuarem sendo analisados.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
Python
Estrelas
3.3k
Forks
511
Merge médio
3d 8h
PRs com merge (30d)
103

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de aws-powertools/powertools-lambda-python

Todas as issues de aws-powertools/powertools-lambda-python

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.