Aller au contenu
ecdsa.com
PyJWT (Python)Bibliothèques JWT

Message d’erreur

Not enough segments

Également affiché sous la forme

  • jwt.exceptions.DecodeError: Not enough segments

PyJWT (Python) — jwt.exceptions.DecodeError

Ce que cela signifie

PyJWT n’a pas pu découper l’entrée en `header.payload.signature` : elle contient moins de deux points. La chaîne n’est pas un JWS compact, donc aucune clé ni aucun algorithme n’a été consulté. La valeur qui parvient à `jwt.decode()` est autre chose qu’un JWT, ou un JWT qui a perdu sa fin en chemin.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Vérifier la forme avant le décodage

    Un JWS compact contient exactement deux points. Rejetez tout le reste avec une 401 dès la frontière de votre API, afin qu’aucune entrée malformée n’atteigne jamais le décodeur.

    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.

    Valider les jetons opaques auprès de l’émetteur

    Si le fournisseur émet des jetons d’accès opaques, appelez son point de terminaison d’introspection de jeton (RFC 7662), ou configurez le fournisseur pour qu’il émette des jetons d’accès JWT pour votre API (souvent en demandant une audience).

    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)

Erreurs associées

Parcourir toute la base de données des erreurs de signature