转换APNs身份验证密钥以与PyJWT一起使用

时间:2019-03-02 01:01:11

标签: python apple-push-notifications pyjwt

上下文

我正在使用#include <iostream> #include <list> #include <algorithm> #include <iterator> void printLinkedList(const std::list<int> &l) { for(int x : l) { std::cout << x << " "; } std::cout << std::endl; } int main() { std::list<int> l; l.push_back(10); l.push_back(20); l.push_back(30); std::cout << "Before copy: "; printLinkedList(l); std:copy_n(l.begin(), l.size(), std::back_inserter(l)); std::cout << "After copy: "; printLinkedList(l); return 0; } 生成jwt,以将推送通知从python后端发送到APN(Apple推送通知服务)。我的后端在标准GAE(Google App Engine)实例上运行,因此必须在pyjwt中使用旧版软件包pycryptoecdsa而不是cryptography({{3 }}。

问题

我的pyjwt(我从Apple Developer下载的)被格式化为auth_key.p8,但是-----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转换为其他格式?

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

对我来说,这是由于键末尾有换行符引起的。删除换行符后,错误消失了。