現在、JWT 用に 2 つのライブラリを使用しています。サーバー側の最初のもの
2つ目はクライアント側
トークン ベースのログイン システムを作成しています。私が望むのは、サーバー側でトークンを作成し、JWE(JSON WEB ENCRYPTION) で暗号化した後、そのトークンをクライアントに返し、html5 ローカル ストレージに保存することだけです。
問題は、javascript JOSE Library で暗号化されたトークンを復号化することです
現在、JWT 用に 2 つのライブラリを使用しています。サーバー側の最初のもの
2つ目はクライアント側
トークン ベースのログイン システムを作成しています。私が望むのは、サーバー側でトークンを作成し、JWE(JSON WEB ENCRYPTION) で暗号化した後、そのトークンをクライアントに返し、html5 ローカル ストレージに保存することだけです。
問題は、javascript JOSE Library で暗号化されたトークンを復号化することです
JWEは標準フォーマットであるため、プラットフォーム (PHP、Java、JS...) から JWE を発行し、別のプラットフォームで読み取ることは問題ありません。
ここで唯一の問題は、
私はnov/jose-phpを知りませんが、コード レビューと実行したテストでは、いくつかのよく知られているアルゴリズム (キー暗号化とコンテンツ暗号化の / /) をサポートしRSA1_5
てRSA-OAEP
いることがわかります。dir
A128CBC-HS256
A256CBC-HS512
RSA-OAEP
プロジェクトでandA128CBC-HS256
またはを使用するとA256CBC-HS512
、一方の側で暗号化し、もう一方の側で復号化できるはずです。
AxxxKW
PHP でやなどの他のアルゴリズムを使用する場合は、数十のアルゴリズム、圧縮などをサポートするspomky-labs/joseAxxxGCM
PHP ライブラリを確認する必要があります。
また、いくつかのプラットフォームで多くの Jose 実装を一覧表示しているjwt.ioも参照してください。
秘密/公開 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