Перейти к содержимому
ecdsa.com
firebase/php-jwt (PHP)PHP

Сообщение об ошибке

"kid" invalid, unable to lookup correct key

Также выводится как

  • "kid" empty, unable to lookup correct key

Исключение «\"kid\" empty, unable to lookup correct key» выбрасывается для токенов без заголовка `kid`, если передан массив ключей.

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

Что это означает

Вы передали в `JWT::decode` массив ключей (обычно из `JWK::parseKeySet`), но в массиве нет записи для `kid` из заголовка токена. php-jwt выбирает ключ строго по `kid` и другие ключи не пробует. Родственная ошибка «\"kid\" empty» означает, что в токене вообще нет `kid`, а без него ключ из массива выбрать невозможно.

Почему это происходит

Как исправить

  1. 1.

    Используйте CachedKeySet

    Этот класс кеширует JWKS через PSR-6 и запрашивает набор заново, когда приходит неизвестный `kid`; необязательное ограничение частоты запросов не даёт случайным значениям `kid` заваливать издателя запросами.

    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.

    Передавайте один Key для издателей без kid

    Если издатель использует ровно один ключ и не указывает `kid`, передайте этот ключ напрямую.

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

Связанные ошибки

Открыть всю базу ошибок подписей