1

语境

我正在使用pyjwt生成一个 jwt 来将推送通知从 python 后端发送到 APNs(Apple 推送通知服务)。我的后端在标准 GAE(Google App Engine)实例上运行,因此我必须使用旧包pycryptoecdsa而不是cryptographypyjwt( docs ) 中。

问题

我的auth_key.p8(我从 Apple Developer 下载的)是 formatted -----BEGIN PRIVATE KEY-----,但ecdsa包希望它是 formatted -----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成不同的格式吗?

谢谢您的帮助。

4

1 回答 1

0

对我来说,这是由于在密钥末尾有一个换行符。删除换行符后,错误消失了。

于 2021-02-09T18:53:00.170 回答