Zum Inhalt springen
ecdsa.com
JJWT (Java)Java

Fehlermeldung

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

Auch ausgegeben als

  • 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

Wortlaut von JJWT 0.12+ (beachte die zwei Leerzeichen vor „Found“). JJWT 0.11 und älter meldeten „JWT strings must contain exactly 2 period characters. Found: N“. Eine Eingabe mit Leerzeichen scheitert schon vorher mit „Compact JWT strings may not contain whitespace.“

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

Was der Fehler bedeutet

JJWT hat die Punkte in der Eingabe gezählt und weder die 2 eines signierten Tokens (JWS) noch die 4 eines verschlüsselten (JWE) gefunden. Der String ist kein kompaktes JWT, also wurden weder Schlüssel noch Signatur angesehen. „Found: 0“ steht typischerweise für einen opaken Wert wie eine Session-ID oder einen API-Schlüssel; eine Meldung über Whitespace bedeutet, dass das Präfix `Bearer` oder ein Zeilenumbruch noch daranhängt.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Token korrekt aus dem Header extrahieren

    Akzeptiere nur `Bearer <token>` (Schema ohne Beachtung der Groß- und Kleinschreibung) und antworte auf alles andere mit 401.

    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.

    Oder das Framework extrahieren lassen

    Die Unterstützung für Ressourcenserver in Spring Security extrahiert und validiert Bearer Tokens, einschließlich der Fehlerantworten nach 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();
    }

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen