Aller au contenu
ecdsa.com
JJWT (Java)Java

Message d’erreur

Invalid compact JWT string: Compact JWSs must contain exactly 2 period characters, and compact JWEs must contain exactly 4. Found: 0

Également affiché sous la forme

  • io.jsonwebtoken.MalformedJwtException: Invalid compact JWT string: Compact JWSs must contain exactly 2 period characters, and compact JWEs must contain exactly 4. Found: 1
  • io.jsonwebtoken.MalformedJwtException: Compact JWT strings may not contain whitespace.
  • io.jsonwebtoken.MalformedJwtException: JWT strings must contain exactly 2 period characters. Found: 0

Libellé de JJWT 0.12+ (notez les deux espaces avant « Found »). JJWT 0.11 et les versions antérieures affichaient « JWT strings must contain exactly 2 period characters. Found: N ». Une entrée contenant des espaces échoue plus tôt avec « Compact JWT strings may not contain whitespace. »

JJWT (Java) — io.jsonwebtoken.MalformedJwtException from JwtParser.parse*

Ce que cela signifie

JJWT a compté les points dans l’entrée et n’a trouvé ni les 2 d’un jeton signé (JWS) ni les 4 d’un jeton chiffré (JWE). La chaîne n’est pas un JWT compact : aucune clé ni aucune signature n’a donc été examinée. « Found: 0 » désigne généralement une valeur opaque, comme un identifiant de session ou une clé d’API ; un message sur des espaces indique que le préfixe `Bearer` ou un saut de ligne est encore attaché.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Extraire correctement le jeton de l’en-tête

    N’acceptez que `Bearer <token>` (schéma insensible à la casse) et répondez 401 pour tout le reste.

    java
    static String bearerToken(String authorizationHeader) {
      if (authorizationHeader == null) return null;
      String[] parts = authorizationHeader.trim().split("\\s+", 2);
      if (parts.length != 2 || !parts[0].equalsIgnoreCase("Bearer")) return null;
      return parts[1];
    }
  2. 2.

    Ou laisser le framework l’extraire

    La prise en charge du serveur de ressources de Spring Security extrait et valide les jetons porteurs, y compris les réponses d’erreur définies par la RFC 6750.

    java
    // Spring Security resource server: the BearerTokenAuthenticationFilter extracts the token for you.
    @Bean
    SecurityFilterChain api(HttpSecurity http) throws Exception {
      return http
          .authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
          .oauth2ResourceServer(oauth -> oauth.jwt(Customizer.withDefaults()))
          .build();
    }

Erreurs associées

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