【发布时间】:2022-01-04 19:06:04
【问题描述】:
我正致力于在使用 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。我在这里做错了什么?
【问题讨论】:
-
应该是keyLike
-
@LawrenceCherone 是的,当谷歌搜索出现的错误时。我阅读了文档页面,但显然我并不完全了解如何将 publicKey 转换为可接受的格式。
-
这个问题的标题和标签是 Node.js,而实际上使用的运行时只是浏览器中的 javascript。