在 Python 中使用 VAPID 发送 Web 推送通知时出现“Missing 'aud' from Claims”错误

问题描述 投票:0回答:1

堆栈溢出!

我尝试使用

pywebpush
py_vapid
库从 Flask 应用程序发送 Web 推送通知,以使用 VAPID 密钥进行身份验证,但遇到错误,声称我的 VAPID 声明中缺少
aud
字段.

这是我用来发送通知的代码:

from pywebpush import webpush, WebPushException

vapid_private_key_pem = "KE0RL_B2SY1AVcpHRWgTzC68or6cLC4RZaHmkM4ZsLk"

def send_push_notification(subscription_info, data):
    vapid_claims = {
        "sub": "mailto:[email protected]",
        "aud": "https://chat.bitsquad.ru/"
    }

    try:
        response = webpush(
            subscription_info=subscription_info,
            data=data,
            vapid_private_key=vapid_private_key_pem,  
            vapid_claims=vapid_claims
        )
        print("Push sent successfully: ", response)
        return True
    except WebPushException as ex:
        print("Web push failure: ", repr(ex))
        return False

尝试执行此函数时,我收到以下错误:

ValueError: Missing 'aud' from claims. 'aud' is the scheme, host and optional port for this transaction e.g. https://example.com:8080

为了诊断和纠正问题,我采取了几个步骤:

  1. 双重检查VAPID声明:我重新检查了

    vapid_claims
    的格式和内容,确保
    aud
    sub
    和其他必要字段准确符合规范。

  2. 更新库:我确保使用最新版本的

    pywebpush
    py_vapid
    库,以消除由于过时的软件而出现错误的可能性。

  3. 日志记录:在发送通知之前,我添加了关键变量的日志记录,包括

    vapid_claims
    subscription_info
    ,以确保其正确性。

  4. 检查私钥格式:我重新验证了我的 VAPID 私钥的格式,确保其符合预期标准并在代码中正确使用。

不幸的是,尽管我付出了一切努力,“索赔中缺少‘aud’”问题仍然存在,而且我正在达到

python flask vapid
1个回答
0
投票

我遇到了同样的问题,然后我在某处读到 Python Webpush 库会为你处理填充 aud,所以我只提供一个空白字符串,然后事情就从那里开始工作:

"aud": "",  # leave blank for library to fill in
© www.soinside.com 2019 - 2024. All rights reserved.