В браузере через "консоль" получаю RSA приватный ключ:
{
"alg": "RS256",
"d": "123...",
"dp": "123...",
"dq": "123",
"e": "AQAB",
"ext": true,
"key_ops": [
"sign"
],
"kty": "RSA",
"n": "123",
"p": "123",
"q": "123",
"qi": "123"
}
Копирую, и конвертирую в PEM формат через сайт
Через PHP подписываю:
openssl_sign($sHeader . '.' . $sClaim, $strToken, openssl_pkey_get_private($privateKeyPemString), OPENSSL_ALGO_SHA256);
$strToken = base64url_encode($sHeader) . '.' . base64url_encode($sClaim) . '.' . base64url_encode($strToken);
Проблема: JWS токен не работает. Изначально думал, что ошибка в данных, которые подписываю, но ТОЧНО НЕТ, по одним и тем же данным я сделал 2 подписи: Одну через мой PHP скрипт, другую через консоль браузера на сайте, где данное действие выполняется для создания JWS токена. Результат - разница только в самой подписи, что логично, а проблема всё таже - мой токен JWS не работает, а токен сгенерированный через консоль браузера - работает.
Единственное, что странно для меня: В браузере, в коде javascriptах, приватный ключ передается в виде объекта, а я конвертирую его в PEM формат, казалось бы бред, но другого объяснения не вижу,
или подпись в javascript через KJUR.jws.JWS.sign и php через openssl_sign имеет какую-то разницу?