Aller au contenu
ecdsa.com
firebase/php-jwt (PHP)PHP

Message d’erreur

Firebase\JWT\SignatureInvalidException: Signature verification failed

Également affiché sous la forme

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

Lorsque l’exception n’est pas interceptée, PHP affiche « PHP Fatal error: Uncaught Firebase\JWT\SignatureInvalidException: Signature verification failed in …/JWT.php ».

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

Ce que cela signifie

php-jwt a analysé le jeton, accepté l’algorithme pour la clé que vous avez passée, et la vérification de la signature a renvoyé false : la clé et le jeton ne vont pas ensemble, ou le jeton a été modifié après la signature. `SignatureInvalidException` est une sous-classe de `UnexpectedValueException`, si bien qu’un bloc catch générique peut la masquer parmi les erreurs d’analyse.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Passer tout le jeu de clés et laisser php-jwt choisir selon le kid

    `JWT::decode` accepte un tableau d’objets `Key` indexé par `kid` (issu de `JWK::parseKeySet`) ou un `CachedKeySet`, qui se met en outre à jour lors d’une rotation.

    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.

    Comparer les deux moitiés de la paire de clés

    Si la clé publique dérivée de la clé privée de l’émetteur diffère de celle que vous avez configurée, la vérification de la signature ne peut pas réussir.

    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

Erreurs associées

Parcourir toute la base de données des erreurs de signature