В настоящее время я использую две библиотеки для JWT. Первый для серверной части
а второй для стороны клиента
Я создаю систему авторизации на основе токенов. Все, что я хочу, это создать токен на стороне сервера и после шифрования с помощью JWE (JSON WEB ENCRYPTION) вернуть этот токен клиенту и сохранить его в локальном хранилище html5.
проблема в том, чтобы расшифровать зашифрованный токен в библиотеке JOSE
Потому что JWE это стандартный формат, тогда нет проблем с выпуском JWE с платформы (PHP, Java, JS …) и чтением его с другой.
Единственная проблема здесь в том, что
я не знаю ноябрь / хосе-PHP но обзор кода и выполненные мною тесты показывают, что он поддерживает некоторые известные алгоритмы (RSA1_5
/RSA-OAEP
/dir
для шифрования ключей и A128CBC-HS256
/A256CBC-HS512
для шифрования контента).
Если вы используете RSA-OAEP
а также A128CBC-HS256
или же A256CBC-HS512
в вашем проекте, то вы должны иметь возможность шифровать с одной стороны и расшифровать с другой стороны.
Если вы хотите использовать другие алгоритмы на PHP, такие как AxxxKW
или же AxxxGCM
, вы должны взглянуть на spomky-лаборатории / хосе PHP библиотека, которая поддерживает десятки алгоритмов, сжатия и многое другое.
Вы также должны посмотреть на jwt.io который перечисляет много реализаций Jose на нескольких платформах.
Частный / Общественный Конвертер ключей RSA
<?php
use Jose\Factory\JWKFactory;
$key = JWKFactory::createFromKeyFile('/path/to/your/key.pem');
// The variable $key is a JWKInterface instance that can be easily converted into a JSON object: json_encode($key)
В чистом PHP:
<?php
$res = openssl_pkey_get_private($data);
if (false === $res) {
$res = openssl_pkey_get_public($data);
}
// Verify here that $res is not false.$details = openssl_pkey_get_details($res);
//Verify here that the array $details has a key 'rsa' (could be 'ec')
$components = [
'n' => 'n',
'e' => 'e',
'd' => 'd',
'p' => 'p',
'q' => 'q',
'dp' => 'dmp1',
'dq' => 'dmq1',
'qi' => 'iqmp',
];
$key = ['kty' => 'RSA'];
foreach ($details['rsa'] as $key => $value) {
if (in_array($key, $components)) {
$key[array_search($key, $components)] = Base64Url::encode($value); // Base64 Url Safe encoding. See https://github.com/Spomky-Labs/base64url
}
}
// The variable $key is an array with the expected information
Других решений пока нет …