繁体   English   中英

PHP 从 SHA256 生成 JWT 令牌,缺少签名

[英]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 解决了问题。

仍然不知道为什么。 更改日志不指示任何类型的错误修复。

https://github.com/lcobucci/jwt/releases/tag/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM