Fehlermeldung
Error(InvalidAlgorithm)
Auch ausgegeben als
- called `Result::unwrap()` on an `Err` value: Error(InvalidAlgorithm)
- InvalidAlgorithm
`{:?}` gibt `Error(InvalidAlgorithm)` aus, `{}` gibt `InvalidAlgorithm` aus.
jsonwebtoken (Rust crate) — ErrorKind::InvalidAlgorithm from decode()
Was der Fehler bedeutet
Der Wert `alg` des Tokens steht nicht in `validation.algorithms`, oder er passt nicht zur Familie des `DecodingKey` (ein EC-Schlüssel kann kein RS256 prüfen). Diese Prüfung findet vor jeder Signaturprüfung statt. Der häufigste Auslöser ist `Validation::default()`, das nur HS256 erlaubt.
Warum der Fehler auftritt
Validation::default() mit einem asymmetrischen Token
häufig`Validation::default()` ist `Validation::new(Algorithm::HS256)`. Tokens von Identity Providern sind meist RS256 oder ES256 und scheitern sofort.
Der Aussteller hat den Algorithmus gewechselt
gelegentlichEine Migration beim Provider (zum Beispiel RS256 → ES256) lässt Verifizierer scheitern, die den alten Algorithmus fest vorgeben.
Schlüssel und Algorithmus aus verschiedenen Familien
gelegentlichRS256 und ES256 gemeinsam aufzulisten hilft nicht, wenn der `DecodingKey` ein RSA-Schlüssel und das Token ES256 ist: Die Familie des Schlüssels muss zum Algorithmus des Tokens passen.
So behebst du den Fehler
- 1.
Validation für den Algorithmus des Ausstellers erstellen
Verwende `Validation::new` mit dem Algorithmus des Ausstellers und setze gleich auch den erwarteten Aussteller und die erwartete Audience – die Standardwerte prüfen sie nicht.
rust let mut validation = Validation::new(Algorithm::ES256); // the issuer's algorithm validation.set_issuer(&["https://issuer.example.com/"]); validation.set_audience(&["api://orders"]); let data = decode::<Claims>(&token, &key, &validation)?;