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

时间:2019-07-03 16:51:07

标签: php laravel jwt github-api

我试图通过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 script验证了私钥的有效性,该{@ 3}会生成完整的JWT令牌并成功使用它来调用API。

此代码是Laravel 5.8代码库的一部分,我在Windows 10 OS上使用php artisan serve和php 7.3来运行它。我确实检查过openssl插件已启用。

作曲家的库版本为"lcobucci/jwt": "3.3.0"

2 个答案:

答案 0 :(得分:0)

将lcobucci / jwt库版本从3.3.0更新到3.3.1解决了该问题。

仍然不确定为什么。更改日志不表示任何错误修正。

https://github.com/lcobucci/jwt/releases/tag/3.3.1

答案 1 :(得分:0)

lcobucci / jwt使用php __toString()魔术方法,因此,例如,如果您使用var_dump $ token和回显$ token,则有所不同。

var_dump将返回令牌对象

echo将返回以下格式的字符串:

HEADER.PAYLOAD.SIGNATURE