Autenticación
La API usa Amazon Cognito como proveedor de identidad. El API Gateway valida el JWT con un Cognito authorizer antes de invocar la Lambda: si el token falta, es inválido o expiró, la respuesta es un 401 que ni siquiera llega al código de la aplicación.
- Registro —
POST /registercrea el usuario en Cognito y su perfil en DynamoDB. - Login —
POST /logincon email y password devuelve los tokens:
{ "message": "Login successful", "tokens": { "idToken": "eyJraWQi...", "accessToken": "eyJraWQi...", "refreshToken": "eyJjdHki...", "expiresIn": 3600 }, "user": { "id": "uuid", "email": "usuario@ejemplo.com" }}- Cada request autenticado manda el token en el header
Authorization:
Authorization: Bearer <idToken>- Expiración — los tokens duran
expiresInsegundos (3600 por defecto). Con token expirado la API responde401con{"error": "Token Expired", ...}; el cliente debe renovar sesión (re-login o refresh token).
Endpoints públicos (sin auth)
Sección titulada «Endpoints públicos (sin auth)»| Endpoint | Por qué |
|---|---|
GET /ping |
Health check |
POST /register |
Aún no existe el usuario |
POST /login |
Es el que emite el token |
POST /billing/webhook |
Lo llama Stripe; se valida con la firma Stripe-Signature, no con JWT |
Todo lo demás requiere Authorization: Bearer <token>.
Identidad dentro de la Lambda
Sección titulada «Identidad dentro de la Lambda»Las lambdas obtienen el usuario del contexto que inyecta el authorizer — el sub del JWT es el userId:
user_id = event['requestContext']['authorizer']['claims']['sub']Nunca se confía en un userId mandado por el cliente para identificar al llamador.
Pool de conductores (app móvil)
Sección titulada «Pool de conductores (app móvil)»Existe un segundo user pool de Cognito exclusivo para conductores, con su propio authorizer (lade-{env}-api-cognito-drivers-authorizer). Los endpoints de la app de conductores validan contra ese pool — un token del pool principal no funciona ahí, y viceversa.
Autorización por rol (dentro del equipo)
Sección titulada «Autorización por rol (dentro del equipo)»Pasar el authorizer solo prueba quién eres. Cada Lambda valida después qué puedes hacer según tu membresía y rol en el equipo (OWNER, ADMIN, USER) — ver Multi-tenancy. Si no eres miembro del equipo del recurso: 403.