我试图通过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"
答案 0 :(得分:0)
将lcobucci / jwt库版本从3.3.0更新到3.3.1解决了该问题。
仍然不确定为什么。更改日志不表示任何错误修正。
答案 1 :(得分:0)
lcobucci / jwt使用php __toString()魔术方法,因此,例如,如果您使用var_dump $ token和回显$ token,则有所不同。
var_dump将返回令牌对象
echo将返回以下格式的字符串:
HEADER.PAYLOAD.SIGNATURE