0

好吧,我已经经历了很多问题,以及他们各自的答案,主要是代替私钥(从 -----BEGIN RSA PRIVATE KEY----- 开始)在 jwt 中进行编码,正在发送公钥(这不是从 -----BEGIN RSA PRIVATE KEY-----) 开始的。我在 python 中使用了 pyjwt 库来编码并获取我用来发送到 docusign 以进行授权的所需令牌。好吧,这是我尝试过的,但行不通

payload = {
    "iss": CLIENT_AUTH_ID,
    "sub": ACCOUNT_ID,
    "exp": unix,
    "aud": "account-d.docusign.com",
    "scope": "signature impersonation"
}
signed = jwt.encode(payload, private_key, algorithm='RS256')

它总是返回 ValueError: cannot deserialize the data,他们的 HS256 算法可以正常工作,但是当涉及到 RS256 时它不会,一些答案建议将其转换为 PEM 格式,但我的已经是那种格式(---- -BEGIN RSA PRIVATE KEY----- (代码) -----END RSA PRIVATE KEY-----)

4

2 回答 2

0

传递给的私钥jwt.encode必须是字节文字b'"..."。我怀疑您的代码正在传递一个字符串(在 Python 中是 unicode 而不是字节)。

于 2020-12-17T17:06:40.990 回答
0

而不是使用 jwt 库,这对我有用 我的进口

from jose import jws
from cryptography.hazmat.primitives import serialization as crypto_serialization

private_key_pem 是 private.pem 文件的路径,其中我的私钥为 (-----BEGIN RSA PRIVATE KEY----- (code) -----END RSA PRIVATE KEY----- )

with open(private_key_pem, "rb") as key_file:
    private_key = serialization.load_pem_private_key(key_file.read(), password=None)

key = private_key.private_bytes(crypto_serialization.Encoding.PEM,
                                crypto_serialization.PrivateFormat.PKCS8,
                                crypto_serialization.NoEncryption())
signed = jws.sign(payload, key, algorithm='RS256')

以这种方式将 python-jose 用于 RS256 算法,希望可以工作

于 2020-12-17T14:21:19.163 回答