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

PHP generate JWT token from SHA256, missing signature

我正在尝试验证为 GitHub 应用程序,但在从私钥生成 JWT 令牌时不断出错。输出令牌总是缺少 signature 部分,这使其无效。

这是我的代码,我使用 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 验证私钥有效性,它生成完整的 JWT 令牌并成功使用它调用 API.

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

composer 的库版本是 "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 将 return 一个令牌对象

echo 将 return 具有以下格式的字符串:

HEADER.PAYLOAD.SIGNATURE