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

使用Python VAPID发送Web Push时遇“缺失aud声明”错误求助

解决pywebpush中VAPID声明缺失aud字段的问题

核心问题分析

你遇到的ValueError: Missing 'aud' from claims错误,看似已手动设置aud,但实际大概率是以下原因导致:

  • 手动指定的aud与推送服务的endpoint域名不匹配
  • 私钥格式错误导致VAPID签名过程异常,aud字段未被正确注入
  • 手动设置的aud格式不符合规范(比如多余的末尾斜杠)

解决方案步骤

1. 移除手动设置的aud,让pywebpush自动生成

aud字段的正确值是推送服务endpoint的origin(比如FCM的https://fcm.googleapis.com、Mozilla推送服务的https://updates.push.services.mozilla.com),而非你自己的网站域名。pywebpush可以自动从subscription_info的endpoint中提取正确的aud,无需手动指定。

修改后的代码:

from pywebpush import webpush, WebPushException
from py_vapid import Vapid

# 替换为你的实际VAPID私钥
vapid_private_key = "KE0RL_B2SY1AVcpHRWgTzC68or6cLC4RZaHmkM4ZsLk"

def send_push_notification(subscription_info, data):
    vapid_claims = {
        "sub": "mailto:vadimshiba@duck.com"
    }

    try:
        # 使用py_vapid生成合规的VAPID签名头
        vapid = Vapid.from_raw_key(vapid_private_key.encode('utf-8'), vapid_claims["sub"])
        headers = vapid.sign(subscription_info['endpoint'])
        
        response = webpush(
            subscription_info=subscription_info,
            data=data,
            headers=headers
        )
        print("Push sent successfully: ", response)
        return True
    except WebPushException as ex:
        print("Web push failure: ", repr(ex))
        return False

2. 确保VAPID私钥格式正确

  • 如果私钥是通过vapid --gen命令生成的,它会是PEM格式(包含-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----),直接使用即可。
  • 如果是URL-safe base64格式(如你当前的字符串),使用Vapid.from_raw_key方法加载是正确方式。

3. 验证subscription_info的完整性

确保前端传递的subscription_info包含完整合法的字段:

# 示例合规的subscription_info结构
subscription_info = {
    "endpoint": "https://fcm.googleapis.com/fcm/send/xxxxxx",
    "keys": {
        "p256dh": "base64编码的公钥",
        "auth": "base64编码的密钥"
    }
}

4. 额外排查点

  • 升级依赖到最新版本:pip install --upgrade pywebpush py_vapid
  • 检查推送服务的endpoint是否合法,无拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:03:10