Saltar al contenido
ecdsa.com
Nimbus JOSE + JWT (Java)Java

Mensaje de error

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

También se muestra 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

Qué significa

El selector de claves de Nimbus no devolvió ninguna clave candidata para este token: o el `alg` del token no es uno de los algoritmos que acepta el selector, o ninguna clave del conjunto de claves JWK coincide con el `kid` y el tipo de clave del token. Nimbus evita a propósito decir cuál de las dos cosas ocurrió. Con Spring Security, muy a menudo se trata del RS256 predeterminado de `NimbusJwtDecoder` frente a un emisor que firma con ES256.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Indicar al decodificador qué algoritmo usa el emisor

    `jwsAlgorithm(...)` (o `jwsAlgorithms(...)`) en el builder sustituye el RS256 predeterminado. Limita la lista a los algoritmos que usa realmente el emisor.

    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.

    O configurarlo en application.yml

    Spring Boot ofrece el mismo ajuste como `jws-algorithms`.

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

Errores relacionados

Explorar toda la base de datos de errores de firma