Mensaje de error
Error(InvalidAlgorithm)
También se muestra como
- called `Result::unwrap()` on an `Err` value: Error(InvalidAlgorithm)
- InvalidAlgorithm
`{:?}` imprime `Error(InvalidAlgorithm)` y `{}` imprime `InvalidAlgorithm`.
jsonwebtoken (Rust crate) — ErrorKind::InvalidAlgorithm from decode()
Qué significa
El `alg` del token no está en `validation.algorithms` o no corresponde a la familia de la `DecodingKey` (una clave EC no puede verificar RS256). La comprobación se hace antes de cualquier verificación de firma. La causa más habitual es `Validation::default()`, que solo permite HS256.
Por qué ocurre
Validation::default() con un token asimétrico
frecuente`Validation::default()` equivale a `Validation::new(Algorithm::HS256)`. Los tokens de los proveedores de identidad suelen ser RS256 o ES256 y fallan de inmediato.
El emisor cambió de algoritmo
ocasionalUna migración del proveedor (por ejemplo, RS256 → ES256) rompe los verificadores que fijan el algoritmo anterior.
Clave y algoritmo de familias distintas
ocasionalIncluir RS256 y ES256 en la lista no sirve de nada si la `DecodingKey` es una clave RSA y el token es ES256: la familia de la clave tiene que coincidir con el algoritmo del token.
Cómo solucionarlo
- 1.
Crear la Validation para el algoritmo del emisor
Usa `Validation::new` con el algoritmo del emisor y configura a la vez el emisor y la audiencia esperados: los valores predeterminados no los comprueban.
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)?;