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

Message d’erreur

Invalid crypto padding

Également affiché sous la forme

  • Invalid header padding
  • Invalid payload padding
  • jwt.exceptions.DecodeError: Invalid crypto padding

Le mot placé avant « padding » désigne le segment : `header`, `payload` ou `crypto` (la signature).

PyJWT (Python) — jwt.exceptions.DecodeError while base64url-decoding a segment

Ce que cela signifie

PyJWT a découpé le jeton en trois segments, mais n’a pas pu décoder l’un d’eux en base64url. « crypto padding » désigne le troisième segment (la signature), « header padding » et « payload padding » le premier et le deuxième. Les segments JWS doivent utiliser l’alphabet base64 adapté aux URL (`A–Z a–z 0–9 - _`) sans remplissage `=` ; des espaces, `+`, `/` ou une longueur incorrecte font échouer le décodage avant toute vérification de signature.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Retirer le schéma et valider l’alphabet

    N’acceptez que `Bearer <token>` avec un jeton conforme au motif JWS en base64url ; renvoyez 401 pour tout le reste avant d’appeler PyJWT.

    python
    import re
    
    BASE64URL_JWS = re.compile(r"^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*$")
    
    def extract(authorization: str) -> str:
        scheme, _, token = authorization.partition(" ")
        token = token.strip()
        if scheme.lower() != "bearer" or not BASE64URL_JWS.match(token):
            raise ValueError("not a compact JWS")
        return token
  2. 2.

    Encoder en base64url sans remplissage

    Si vous construisez vous-même les jetons, utilisez le base64 adapté aux URL et supprimez les `=` finaux. Mieux encore : laissez une bibliothèque JOSE assembler le jeton.

    python
    import base64
    
    def b64url(data: bytes) -> str:
        # JWS uses base64url WITHOUT padding (RFC 7515 section 2).
        return base64.urlsafe_b64encode(data).rstrip(b"=").decode("ascii")

Erreurs associées

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