Saltar al contenido
ecdsa.com
firebase/php-jwt (PHP)PHP

Mensaje de error

Firebase\JWT\SignatureInvalidException: Signature verification failed

También se muestra como

  • PHP Fatal error: Uncaught Firebase\JWT\SignatureInvalidException: Signature verification failed

Si no se captura, PHP imprime «PHP Fatal error: Uncaught Firebase\JWT\SignatureInvalidException: Signature verification failed in …/JWT.php».

firebase/php-jwt (PHP) — Firebase\JWT\SignatureInvalidException from JWT::decode

Qué significa

php-jwt analizó el token, aceptó el algoritmo para la clave que le pasas y la comprobación de la firma devolvió false: la clave y el token no se corresponden, o el token se modificó después de firmarse. `SignatureInvalidException` es una subclase de `UnexpectedValueException`, así que un bloque catch genérico puede ocultarla entre los errores de análisis.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Pasar el conjunto de claves completo y dejar que php-jwt elija por kid

    `JWT::decode` acepta un array de objetos `Key` indexado por `kid` (de `JWK::parseKeySet`) o un `CachedKeySet`, que además se actualiza cuando hay una rotación.

    php
    use Firebase\JWT\CachedKeySet;
    use Firebase\JWT\JWT;
    use GuzzleHttp\Client;
    use GuzzleHttp\Psr7\HttpFactory;
    
    // Keys selected by the token's kid, fetched from the issuer's JWKS and cached (PSR-6).
    $keys = new CachedKeySet(
        'https://issuer.example.com/.well-known/jwks.json',
        new Client(),
        new HttpFactory(),
        $cache,              // any PSR-6 cache pool
        3600,                // cache lifetime in seconds
        true                 // rate-limit refetches on unknown kids
    );
    $claims = JWT::decode($token, $keys);
  2. 2.

    Comparar las mitades del par de claves

    Si la clave pública derivada de la clave privada del emisor difiere de la que tienes configurada, la firma no puede verificarse.

    bash
    # Do the issuer's private key and your public key belong together?
    openssl pkey -in issuer-private.pem -pubout | sha256sum
    openssl pkey -pubin -in configured-public.pem | sha256sum

Errores relacionados

Explorar toda la base de datos de errores de firma