Saltar al contenido
ecdsa.com
PyJWT (Python)Bibliotecas de JWT

Mensaje de error

Not enough segments

También se muestra como

  • jwt.exceptions.DecodeError: Not enough segments

PyJWT (Python) — jwt.exceptions.DecodeError

Qué significa

PyJWT no pudo dividir la entrada en `header.payload.signature`: contiene menos de dos puntos. La cadena no es un JWS compacto, así que no se consultó ninguna clave ni ningún algoritmo. Lo que llega a `jwt.decode()` es algo distinto de un JWT, o un JWT que perdió el final por el camino.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Comprobar la forma antes de decodificar

    Un JWS compacto tiene exactamente dos puntos. Rechaza todo lo demás con un 401 en el perímetro de tu API, para que una entrada mal formada nunca llegue al decodificador.

    python
    def bearer_token(headers: dict) -> str | None:
        scheme, _, token = headers.get("Authorization", "").partition(" ")
        if scheme.lower() != "bearer" or token.count(".") != 2:
            return None  # not a compact JWS: answer 401 instead of decoding
        return token
  2. 2.

    Validar los tokens opacos con el emisor

    Si el proveedor emite tokens de acceso opacos, llama a su endpoint de introspección de tokens (RFC 7662) o configura el proveedor para que emita tokens de acceso JWT para tu API (a menudo, basta con solicitar una audiencia).

    python
    import requests
    
    # Opaque tokens are validated by the authorization server (RFC 7662), not by decoding them.
    resp = requests.post(
        "https://issuer.example.com/oauth2/introspect",
        data={"token": token},
        auth=(CLIENT_ID, CLIENT_SECRET),
        timeout=5,
    )
    active = resp.json().get("active", False)

Errores relacionados

Explorar toda la base de datos de errores de firma