Skip to main content

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

  1. Se lee el claim iss del token sin verificar la firma todavía (get_unverified_issuer).
  2. Ese iss se compara contra una whitelist fija de pools conocidos por el backend (pool_for_issuer) — nunca se confía en el iss del token por sí solo para decidir con qué llave validar sin pasar por esta whitelist.
  3. Solo si el iss coincide con un pool de la whitelist, se descarga (o se toma de caché, vía PyJWKClient) el JWKS de ese pool y se valida la firma real, el iss otra vez, token_use y exp (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 por client_id/aud, revísalo aparte sobre el dict decodificado que devuelve validate_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aws_cognito_validation-0.1.0.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aws_cognito_validation-0.1.0-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

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

Hashes for aws_cognito_validation-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6595785dfefa0e03ffc42649425843cc2c6f4d6419cc43c71f231a6a2f62fd54
MD5 45141b677d9407b6f189ad52d1ebb488
BLAKE2b-256 87765b7f10e41372118b496942794fb18e4151c4d6995b7335395a21d4338cf7

See more details on using hashes here.

File details

Details for the file aws_cognito_validation-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for aws_cognito_validation-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4e9d153c8e4e6afcb78f72cd3d18e951c7d454dcd16b10befb609bd54d24c85d
MD5 79490b58149ff3e651c84cc46c123f77
BLAKE2b-256 b9be9008a5bb6d64b2059f19aef266ce0d32c84086be143b865af170524794d5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page