Validación de JWT de Amazon Cognito contra uno o varios User Pools (multi-pool).
Project description
aws-cognito-validation
Validación de JWT de Amazon Cognito contra uno o varios User Pools (multi-pool). Útil cuando distintos frontends/servicios loguean usuarios en distintos User Pools (ej. login nativo vs. login federado con un identity provider externo como Google) y un mismo backend necesita aceptar tokens de cualquiera de esos pools.
Instalación
pip install aws-cognito-validation
Uso
from aws_cognito_validation import (
parse_allowed_pools,
pool_for_issuer,
get_unverified_issuer,
validate_cognito_jwt,
)
# COGNITO_ALLOWED_POOLS como variable de entorno (JSON estándar):
# COGNITO_ALLOWED_POOLS=["us-east-1_AAAAAAAAA:us-east-1", "us-east-1_BBBBBBBBB:us-east-1"]
pools = parse_allowed_pools(os.environ["COGNITO_ALLOWED_POOLS"])
def get_current_token(token: str) -> dict:
issuer = get_unverified_issuer(token)
pool = pool_for_issuer(issuer, pools)
if pool is None:
raise PermissionError("Issuer no permitido")
is_valid, message, decoded = validate_cognito_jwt(token, pool)
if not is_valid:
raise PermissionError(message)
return decoded
También se soporta la forma compacta separada por comas, sin JSON:
COGNITO_ALLOWED_POOLS=us-east-1_AAAAAAAAA:us-east-1,us-east-1_BBBBBBBBB:us-east-1
Cómo funciona la validación multi-pool
- Se lee el claim
issdel token sin verificar la firma todavía (get_unverified_issuer). - Ese
issse compara contra una whitelist fija de pools conocidos por el backend (pool_for_issuer) — nunca se confía en elissdel token por sí solo para decidir con qué llave validar sin pasar por esta whitelist. - Solo si el
isscoincide con un pool de la whitelist, se descarga (o se toma de caché, víaPyJWKClient) el JWKS de ese pool y se valida la firma real, elissotra vez,token_useyexp(validate_cognito_jwt).
Notas
- Los access tokens de Cognito no llevan el claim
aud(solo los id tokens sí) — la librería no valida audience. Si necesitas restringir porclient_id/aud, revísalo aparte sobre el dict decodificado que devuelvevalidate_cognito_jwt. - El manejo de scopes (ej. permitir solo ciertos scopes por endpoint) no es
parte de esta librería — queda a cargo de cada proyecto sobre el
decoded["scope"]que devuelve la validación.
Licencia
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aws_cognito_validation-0.1.0.tar.gz.
File metadata
- Download URL: aws_cognito_validation-0.1.0.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6595785dfefa0e03ffc42649425843cc2c6f4d6419cc43c71f231a6a2f62fd54
|
|
| MD5 |
45141b677d9407b6f189ad52d1ebb488
|
|
| BLAKE2b-256 |
87765b7f10e41372118b496942794fb18e4151c4d6995b7335395a21d4338cf7
|
File details
Details for the file aws_cognito_validation-0.1.0-py3-none-any.whl.
File metadata
- Download URL: aws_cognito_validation-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e9d153c8e4e6afcb78f72cd3d18e951c7d454dcd16b10befb609bd54d24c85d
|
|
| MD5 |
79490b58149ff3e651c84cc46c123f77
|
|
| BLAKE2b-256 |
b9be9008a5bb6d64b2059f19aef266ce0d32c84086be143b865af170524794d5
|