猿问

使用 PHP 进行 Web 推送的 JWT 签名

我正在尝试使用 PHP 发送网络推送通知。我已经阅读了有关如何实现网络推送协议的信息,例如此处。但是,我认为我并没有真正理解本指南的作者解释如何形成授权标头的步骤。使用这个库并给定由在线生成器创建的 VAPID 密钥,我尝试了以下操作:


use Lcobucci\JWT\Builder;

use Lcobucci\JWT\Signer\Key;

use Lcobucci\JWT\Signer\Ecdsa\Sha256;


$signer = new Sha256();

$privateKey = new Key('<the generated private VAPID key>');

$time = time();


$token = (new Builder())->permittedFor('https://example.com')

                        ->expiresAt($time + 3600)

                        ->withHeader('alg', 'ES256')

                        ->withClaim('sub', 'mailto:someone@example.com')

                        ->getToken($signer, $privateKey);

我想要得到的是类似于<JWT Info>.<JWT Data>.<Signature>out of 的东西$token。但是,我收到错误。


致命错误:未捕获 InvalidArgumentException:无法解析您的密钥,原因:错误:0909006C:PEM ...


有人知道我在这里做错了什么吗?预先非常感谢!


30秒到达战场
浏览 107回答 1
1回答

守着一只汪

在内部,Lcobucci/jwtAPI使用 openssl_pkey_get_private()和openssl_pkey_get_public()函数。根据文档,他们期望 PEM 编码的密钥,但这不是您提供的。这类键以--------BEGIN前缀开头。
随时随地看视频慕课网APP
我要回答