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

Message d’erreur

"kid" invalid, unable to lookup correct key

Également affiché sous la forme

  • "kid" empty, unable to lookup correct key

L’exception « \"kid\" empty, unable to lookup correct key » est levée pour les jetons sans en-tête `kid` lorsqu’un tableau de clés est passé.

firebase/php-jwt (PHP) — UnexpectedValueException from JWT::decode with a key array

Ce que cela signifie

Vous avez passé à `JWT::decode` un tableau de clés (généralement issu de `JWK::parseKeySet`), et ce tableau n’a aucune entrée pour le `kid` de l’en-tête du jeton. php-jwt sélectionne la clé strictement par `kid` ; il n’essaie pas d’autres clés. Le message voisin « \"kid\" empty » signifie que le jeton n’a pas de `kid` du tout, ce qu’un tableau de clés ne peut pas résoudre.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Utiliser CachedKeySet

    Cette classe met le JWKS en cache via PSR-6 et le récupère de nouveau lorsqu’un `kid` inconnu arrive, avec une limitation de débit facultative pour que des valeurs de `kid` aléatoires ne puissent pas submerger l’émetteur de requêtes.

    php
    use Firebase\JWT\CachedKeySet;
    
    // Refetches the JWKS when a token names a kid the cache does not have (rate-limited).
    $keys = new CachedKeySet($jwksUri, $httpClient, $httpFactory, $cachePool, 3600, true);
    $claims = JWT::decode($token, $keys);
  2. 2.

    Passer un seul objet Key pour les émetteurs sans kid

    Si l’émetteur n’a qu’une seule clé et omet `kid`, passez directement cette clé.

    php
    // Issuer without kid and with exactly one key: pass a Key object, not an array.
    $claims = JWT::decode($token, new Key($publicKeyPem, 'ES256'));

Erreurs associées

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