Mensagem de erro
Error(InvalidAlgorithm)
Também aparece como
- called `Result::unwrap()` on an `Err` value: Error(InvalidAlgorithm)
- InvalidAlgorithm
`{:?}` imprime `Error(InvalidAlgorithm)`, `{}` imprime `InvalidAlgorithm`.
jsonwebtoken (Rust crate) — ErrorKind::InvalidAlgorithm from decode()
O que significa
O `alg` do token não está em `validation.algorithms` ou não combina com a família da `DecodingKey` (uma chave EC não consegue verificar RS256). Essa checagem acontece antes de qualquer verificação de assinatura. A causa mais comum é `Validation::default()`, que permite só HS256.
Por que acontece
Validation::default() com um token assimétrico
comum`Validation::default()` equivale a `Validation::new(Algorithm::HS256)`. Tokens de provedores de identidade costumam ser RS256 ou ES256 e falham na hora.
O emissor trocou de algoritmo
ocasionalUma migração do provedor (por exemplo, RS256 → ES256) quebra os verificadores que fixam o algoritmo antigo.
Chave e algoritmo de famílias diferentes
ocasionalListar RS256 e ES256 não adianta se a `DecodingKey` é uma chave RSA e o token é ES256: a família da chave precisa corresponder ao algoritmo do token.
Como corrigir
- 1.
Montar a Validation para o algoritmo do emissor
Use `Validation::new` com o algoritmo do emissor e defina, ao mesmo tempo, o emissor e o público-alvo esperados — os padrões não os verificam.
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)?;