我正在使用 Webpack5 的客户端 Web 应用程序中实现 JWT 验证。当在运行 PHP 的后端创建用户时,我创建了一个公钥和私钥对,以便在 JWT 中使用,如下所示并存储它们:
$keyPair = sodium_crypto_sign_keypair();
$privateKey = base64_encode(sodium_crypto_sign_secretkey($keyPair));
$publicKey = base64_encode(sodium_crypto_sign_publickey($keyPair));
然后firebase/php-jwt
像这样创建请求:
$jwt = JWT::encode($payload, $privateKey, 'EdDSA');
但是,使用jose
我在尝试验证 JWT 时收到以下错误:
import * as jose from 'jose';
const { payload, protectedHeader } = await jose.jwtVerify(response.token, window.atob(response.key));
console.log(payload);
console.log(protectedHeader);
TypeError: Key must be of type CryptoKey.
我不明白它如何想要密钥,因为 publicKey 的 base64 字符串和 base64 表示在节点中遇到了相同的 TypeError。我在这里做错了什么?