Pular para o conteúdo
ecdsa.com
Nimbus JOSE + JWT (Java)Java

Mensagem de erro

Signed JWT rejected: Another algorithm expected, or no matching key(s) found

Também aparece como

  • com.nimbusds.jose.proc.BadJOSEException: Signed JWT rejected: Another algorithm expected, or no matching key(s) found
  • org.springframework.security.oauth2.jwt.BadJwtException: An error occurred while attempting to decode the Jwt: Signed JWT rejected: Another algorithm expected, or no matching key(s) found

Nimbus JOSE + JWT (Java) — BadJOSEException from DefaultJWTProcessor; also surfaced by Spring Security's NimbusJwtDecoder

O que significa

O seletor de chaves do Nimbus não retornou nenhuma chave candidata para este token: ou o `alg` do token não está entre os algoritmos que o seletor aceita, ou nenhuma chave do conjunto de chaves JWK corresponde ao `kid` e ao tipo de chave do token. O Nimbus deliberadamente não diz qual dos dois aconteceu. Com o Spring Security, muitas vezes isso é o RS256 padrão do `NimbusJwtDecoder` diante de um emissor que assina com ES256.

Por que acontece

Como corrigir

  1. 1.

    Dizer ao decodificador qual algoritmo o emissor usa

    `jwsAlgorithm(...)` (ou `jwsAlgorithms(...)`) no builder substitui o padrão RS256. Mantenha na lista só os algoritmos que o emissor realmente usa.

    java
    @Bean
    JwtDecoder jwtDecoder() {
      return NimbusJwtDecoder.withIssuerLocation("https://issuer.example.com/realms/main")
          .jwsAlgorithm(SignatureAlgorithm.ES256) // the issuer's algorithm; RS256 is only the default
          .build();
    }
  2. 2.

    Ou configurar no application.yml

    O Spring Boot expõe a mesma configuração como `jws-algorithms`.

    yaml
    spring:
      security:
        oauth2:
          resourceserver:
            jwt:
              issuer-uri: https://issuer.example.com/realms/main
              jws-algorithms: ES256

Erros relacionados

Ver toda a base de erros de assinatura