[英]PHP generate JWT token from SHA256, missing signature
我正在尝试作为 GitHub 应用程序进行身份验证,但在从私钥生成 JWT 令牌时不断出错。 输出令牌总是缺少签名部分,这使其无效。
这是我的代码,我使用lcobucci/jwt库来生成
$token = (new Builder())
->expiresAt((new DateTimeImmutable('+10 minutes'))->getTimestamp())
->issuedAt((new DateTimeImmutable())->getTimestamp())
->issuedBy($config['appId'])
->getToken(new Sha256(), new Key('file://'.$config['keyPath']));
// output
// HEADER .PAYLOAD .SIGNATURE
// eyJ0eX***lIn0.eyJleHAiO***0ODMifQ.
我已经使用这个ruby 脚本验证了私钥的有效性,该脚本生成完整的 JWT 令牌并成功使用它来调用 API。
此代码是 Laravel 5.8 代码库的一部分,我在 Windows 10 操作系统上使用php artisan serve
和 php 7.3 运行它。 我确实检查了 openssl 插件是否已启用。
作曲家的库版本是"lcobucci/jwt": "3.3.0"
将 lcobucci/jwt 库版本从 3.3.0 更新到 3.3.1 解决了问题。
仍然不知道为什么。 更改日志不指示任何类型的错误修复。
lcobucci/jwt 使用 php __toString() 魔术方法,因此如果您例如 var_dump $token 和 echo $token,则情况有所不同。
var_dump 将返回一个令牌对象
echo 将返回一个具有以下格式的字符串:
HEADER.PAYLOAD.SIGNATURE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.