【发布时间】:2019-07-24 01:19:45
【问题描述】:
上下文
我正在使用pyjwt 生成一个 jwt 以将推送通知从 python 后端发送到 APNs(Apple 推送通知服务)。我的后端在标准 GAE (Google App Engine) 实例上运行,因此我必须使用旧版包 pycrypto 和 ecdsa 而不是 pyjwt (docs) 中的 cryptography。
问题
我的auth_key.p8(我从Apple Developer 下载)的格式为-----BEGIN PRIVATE KEY-----,但ecdsa 包预计它的格式为-----BEGIN EC PRIVATE KEY-----。因此我得到以下回溯:
File "app/venv/lib/python3.7/site-packages/jwt/api_jwt.py", line 65, in encode
json_payload, key, algorithm, headers, json_encoder
File "app/venv/lib/python3.7/site-packages/jwt/api_jws.py", line 113, in encode
key = alg_obj.prepare_key(key)
File "app/venv/lib/python3.7/site-packages/jwt/contrib/algorithms/py_ecdsa.py", line 44, in prepare_key
key = ecdsa.SigningKey.from_pem(key)
File "app/venv/lib/python3.7/site-packages/ecdsa/keys.py", line 189, in from_pem
privkey_pem = string[string.index(b("-----BEGIN EC PRIVATE KEY-----")):]
ValueError: subsection not found
我的auth_key 似乎是ecdsa 不接受的格式,但我不知道如何解决这个问题。我应该将此auth_key 转换为不同的格式吗?
感谢您的帮助。
【问题讨论】:
-
你有没有想过这个问题?我遇到了同样的问题。
-
回顾我的代码,看来我放弃了,决定改用 Firebase。他们提供了一个 python sdk,并自己处理与 APNS 的连接。 firebase.google.com/docs/cloud-messaging
标签: python apple-push-notifications pyjwt