gpt4 book ai didi

javascript - 是否可以在 Php 中加密 JWT token 并在 Javascript 中解密?

转载 作者:行者123 更新时间:2023-11-29 19:09:33 32 4
gpt4 key购买 nike

我目前正在为 JWT 使用两个库。服务器端的第一个

jose php Library

第二个用于客户端

jose js library

我正在创建一个基于 token 的登录系统。我想要的只是在服务器端创建一个 token ,并在使用 JWE(JSON WEB ENCRYPTION) 加密后将该 token 返回给客户端并保存到 html5 本地存储。

问题是解密 javascript JOSE 库中的加密 token

最佳答案

因为 JWE是标准格式,那么从一个平台(PHP、Java、JS...)发出JWE,用另一个平台读取就没有问题。

这里唯一的问题是

  • 您必须为每个要使用的平台找到一个库。
  • 这些库必须有共同的算法

我不知道nov/jose-php但是我执行的代码审查和测试表明它支持一些众所周知的算法(RSA1_5/RSA-OAEP/dir 用于 key 加密和 A128CBC-HS256/A256CBC-HS512 用于内容加密)。

如果您在项目中使用 RSA-OAEPA128CBC-HS256A256CBC-HS512,那么您应该能够加密一边解密,一边解密。

如果您想在 PHP 上使用其他算法,例如 AxxxKWAxxxGCM,您应该查看 spomky-labs/jose支持多种算法、压缩等的 PHP 库。

你还应该看看 jwt.io其中列出了多个平台上的许多 Jose 实现。

编辑

私有(private)/公共(public) RSA key 转换器

spomky-labs/jose :

<?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

关于javascript - 是否可以在 Php 中加密 JWT token 并在 Javascript 中解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40232063/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com