【发布时间】:2020-08-28 07:49:51
【问题描述】:
我正在尝试使用 PHP 发送网络推送通知。我已经阅读了如何实现网络推送协议,例如here。但是,我认为我并没有真正理解本指南的作者解释如何形成授权标头的步骤。使用this 库并给定由online generator 创建的我的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> 的$token 的东西。但是,我得到一个错误。
致命错误:未捕获的 InvalidArgumentException:无法解析您的密钥,原因:错误:0909006C:PEM ...
有人知道我在这里做错了什么吗?提前非常感谢!
【问题讨论】:
-
我不知道 VAPID 密钥是什么,但您的
$signer可以与 ECDSA 密钥一起使用。鉴于我使用您提供的 VAPID 生成器得到的结果,我很确定这不是 ECDSA 密钥。 -
在specification 中,它在第 2 节中说这些密钥必须在 P-256 曲线上与椭圆曲线数字签名算法 (ECDSA) 一起使用。