Fehlermeldung
Expected a different algorithm (JWT::IncorrectAlgorithm)
Auch ausgegeben als
- JWT::IncorrectAlgorithm: Expected a different algorithm
ruby-jwt (Ruby) — JWT::IncorrectAlgorithm from JWT.decode
Was der Fehler bedeutet
Der Header `alg` des Tokens gehört nicht zu den Algorithmen, die du erlaubt hast – und wenn du überhaupt keine Option `algorithm:`/`algorithms:` übergeben hast, erlaubt ruby-jwt gar keinen. Seit ruby-jwt 2.x muss der Verifizierer den Algorithmus explizit nennen, denn dem eigenen Header des Tokens zu vertrauen ist die Ursache der bekannten Angriffe durch Algorithm Confusion. Die Signatur wurde nicht geprüft.
Warum der Fehler auftritt
Kein Algorithmus an JWT.decode übergeben
häufigCode aus Tutorials für ruby-jwt 1.x ruft `JWT.decode(token, key, true)` auf. Aktuelle Versionen lehnen in diesem Fall jedes Token mit diesem Fehler ab.
Der Aussteller verwendet einen anderen Algorithmus als konfiguriert
häufigEine Migration von RS256 auf ES256 (oder von HS256 auf einen asymmetrischen Algorithmus) beim Aussteller lässt Verifizierer scheitern, die noch den alten Wert fest vorgeben.
Ein Token eines anderen Ausstellers oder ein Sondierungsversuch
gelegentlichAn eine API, die RS256/ES256 prüft, gesendete Tokens mit `alg: none` oder `HS256` werden hier abgelehnt – genau so soll es sein.
So behebst du den Fehler
- 1.
Algorithmus des Ausstellers explizit angeben
Übergib `algorithm:` (oder `algorithms:` für eine kurze Liste). Bei mehreren Algorithmen verwende einen JWKS-Loader, damit jedes Token mit einem Schlüssel des passenden Typs geprüft wird.
ruby payload, header = JWT.decode(token, public_key, true, algorithm: "ES256") # several allowed algorithms (e.g. during a migration), each matched to the right key type: payload, header = JWT.decode(token, nil, true, algorithms: ["ES256", "RS256"], jwks: jwks_loader)