Message d’erreur
Error(InvalidAlgorithm)
Également affiché sous la forme
- called `Result::unwrap()` on an `Err` value: Error(InvalidAlgorithm)
- InvalidAlgorithm
`{:?}` affiche `Error(InvalidAlgorithm)`, `{}` affiche `InvalidAlgorithm`.
jsonwebtoken (Rust crate) — ErrorKind::InvalidAlgorithm from decode()
Ce que cela signifie
L’`alg` du jeton ne figure pas dans `validation.algorithms`, ou ne correspond pas à la famille de la `DecodingKey` (une clé EC ne peut pas vérifier du RS256). Ce contrôle a lieu avant toute vérification de signature. Le déclencheur le plus fréquent est `Validation::default()`, qui n’autorise que HS256.
Pourquoi cela se produit
Validation::default() avec un jeton asymétrique
fréquente`Validation::default()` équivaut à `Validation::new(Algorithm::HS256)`. Les jetons des fournisseurs d’identité sont généralement en RS256 ou ES256 et échouent immédiatement.
L’émetteur a changé d’algorithme
occasionnelleUne migration chez le fournisseur (par exemple RS256 → ES256) casse les vérificateurs qui figent l’ancien algorithme.
Clé et algorithme de familles différentes
occasionnelleLister à la fois RS256 et ES256 ne sert à rien si la `DecodingKey` est une clé RSA et que le jeton est en ES256 : la famille de la clé doit correspondre à l’algorithme du jeton.
Comment corriger l’erreur
- 1.
Construire la Validation pour l’algorithme de l’émetteur
Utilisez `Validation::new` avec l’algorithme de l’émetteur et définissez en même temps l’émetteur et l’audience attendus : les valeurs par défaut ne les vérifient pas.
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)?;