Я сгенерировал токен Firebase, используя PHP-JWT библиотека для настраиваемой аутентификации в Firebase, как предложено Вот.
Я пытался декодировать сгенерированный токен, используя раскодировать Функция той же библиотеки.
Вот мой код
Я определил закрытый ключ в моем файле конфигурации, используя следующую строку.
define("FIREBASE_PRIVATE_KEY","-----BEGIN PRIVATE KEY-----\nMY_VERY_VERY_LONG_KEY\n-----END PRIVATE KEY-----\n");
Вот код для декодирования токена.
JWT::decode($token, FIREBASE_PRIVATE_KEY, array('RS256'));
Этот код выдает следующее исключение.
openssl_verify(): supplied key param cannot be coerced into a public key
Когда я использую HS256 как для декодирования, так и для кодирования все работает отлично.
Но я должен использовать RS256 так как, Пользовательский токен Firebase должен быть подписан только с RS256.
Кто-нибудь может предложить решение этой проблемы?
Отказ от ответственности: не проверено, основываясь на том, что я знаю (на данный момент).
openssl_verify
принимает открытый ключ как параметр, согласно документации.
Вы поставляете закрытый ключ.
Я бы попытался извлечь открытый ключ из закрытого ключа и использовать его в JWT::decode
метод.
Как извлечь публику из частного? Довольно легко:
define("FIREBASE_PRIVATE_KEY","-----BEGIN PRIVATE KEY-----\nMY_VERY_VERY_LONG_KEY\n-----END PRIVATE KEY-----\n");
$private = openssl_pkey_get_private(FIREBASE_PRIVATE_KEY);
$details = openssl_pkey_get_details($private);
// Here's your public key, it's presented as a string, not a resource
$public = $details['key'];
Других решений пока нет …