You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS推送通知PHP cURL调用失败及p256dh使用疑问

问题解答

一、为何正确VAPID公钥仍报「InvalidToken」?

  • VAPID签名验证失败:VAPID需要公钥配合对应私钥生成ES256算法的JWT签名,若签名过期(默认有效期12小时)、公私钥不匹配,或JWT的aud字段(需与推送服务域名一致,比如Mozilla推送服务为https://updates.push.services.mozilla.com)填写错误,都会触发该错误。
  • 推送服务与VAPID凭证不兼容:不同推送服务(如Mozilla、FCM)的VAPID凭证独立,跨服务混用会导致服务端无法识别凭证,返回InvalidToken。
  • 请求头格式错误:VAPID的Authorization头必须是Bearer <JWT>格式,公钥需通过Crypto-Key头以p256ecdsa=<base64url编码的公钥>形式传递。若公钥未做base64url编码、头名拼写错误,都会导致凭证验证失败。
  • 订阅已失效:用户取消订阅、浏览器清除订阅数据后,原推送端点对应的token已无效,即使凭证正确也会返回InvalidToken。

二、p256dh密钥的使用时机与场景

用户订阅时返回的p256dh是用户端的公钥,和auth密钥配合用于加密推送的Payload内容,具体流程:

  1. 推送带内容的消息时,结合用户的p256dh公钥、auth密钥,以及自己生成的临时密钥对,通过Web Push标准加密算法(AEAD_AES_128_GCM)生成加密后的Payload。
  2. 将加密Payload放入请求体,同时在Encryption和Crypto-Key请求头中携带临时公钥等信息,发送至用户的订阅端点。
  3. 浏览器收到推送后,用本地存储的私钥和auth密钥解密Payload,进而展示通知内容。

注意:p256dh与VAPID公钥作用完全不同——前者用于加密消息内容,后者用于验证推送发起者身份,混用必然出现「VAPID public key mismatch」错误。

内容的提问来源于stack exchange,提问作者Europeuser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:19:57