Как проверить токен JSON с помощью открытого ключа RSA?

Новый вопрос, чтобы этот вопрос был конкретным и точным.

У меня есть JWT от Azure, и теперь мне нужно проверить подпись в моем приложении.

Открытые ключи от Microsoft можно найти здесь:

https://login.windows.net/common/discovery/keys

Как использовать эти ключи для проверки подписи? Я могу сказать, что это открытые ключи, которые мне нужны, поскольку заголовок X5T в JWT совпадает с заголовками этого открытого списка.

Я использую JWT-библиотеку PHP, но все, что я ввожу, поскольку открытый ключ, кажется, терпит неудачу.

supplied key param cannot be coerced into a public key 

Итак, используя ссылку выше, которая идет оттуда в функцию openssl_verify PHP как параметр три (ключ $ в примере ниже)?

 $success = openssl_verify($msg, $signature, $key, 'SHA256') 

Все, что я вводил, вызывает ошибку так или иначе.

Благодаря,

Related of "Как проверить токен JSON с помощью открытого ключа RSA?"

Задача решена.

Оказывается, что часть X5C массива JSON является сертификатом, а не открытым ключом, поэтому JSON-декодирование https://login.windows.net/common/discovery/keys и захват элемента X5C и использование openssl для получения открытых ключей:

 $cert_object = openssl_x509_read($cert); $pkey_object = openssl_pkey_get_public(cert_object); $pkey_array = openssl_pkey_get_details($pkey_object); $publicKey = $pkey_array ['key']; 

В этом примере $ cert является значением X5C. Однако этого само по себе недостаточно, поскольку он не закодирован для X509. Так что я сделал, это создать новый файл в окнах под названием certificate.cer, открыть в блокноте и поставить там значение X5C. Затем, дважды щелкнув по октету в окнах, перейдя на вкладку сведений и нажав «скопировать в файл», откроется мастер экспорта сертификатов.

Экспорт как X509 и загрузка на сервер.

 $cert = file_get_contents('Certificates/Public/public.cer'); 

Работает! Вероятно, есть более простой способ, но это работает.