如何使用python将私钥编码为RS256格式的JSON WEB令牌

2024-06-11 02:38:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经讨论了很多问题,以及它们各自的答案,大部分不是私钥(从--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:无法反序列化数据,他们的HS256算法工作正常,但当涉及到RS256时,它不会,一些答案建议将其转换为PEM格式,但我的格式已经是该格式(-----开始RSA私钥------(代码)---结束RSA私钥------)


Tags: key答案id编码格式privatejwtrsa
2条回答

我没有使用jwt库,而是使用了它 我的进口

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

private_key_pem是private.pem文件的路径,其中我的私钥为 (-开始RSA私钥-(代码)-结束RSA私钥-)

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')

以这种方式使用PythonJose for RS256算法将有望奏效

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

相关问题 更多 >