如何使用 python 将私钥编码为 RS256 格式的 JSON WEB TOKEN
Posted
技术标签:
【中文标题】如何使用 python 将私钥编码为 RS256 格式的 JSON WEB TOKEN【英文标题】:How to encode private key as JSON WEB TOKEN in RS256 format using python 【发布时间】:2021-03-28 05:45:47 【问题描述】:嗯,我已经经历了很多问题,以及他们各自的答案,主要是代替私钥(从 -----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格式,但我的已经是那种格式(- ----BEGIN RSA PRIVATE KEY----- (code) -----END RSA PRIVATE KEY-----)
【问题讨论】:
【参考方案1】:这对我有用,而不是使用 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 算法,希望可以工作
【讨论】:
【参考方案2】:传递给jwt.encode
的私钥必须是字节文字b'"..."
。我怀疑您的代码正在传递一个字符串(在 Python 中是 unicode 而不是字节)。
【讨论】:
您可以使用他们的官方文档,但仍然无法使用他们提供的 RS256 示例以上是关于如何使用 python 将私钥编码为 RS256 格式的 JSON WEB TOKEN的主要内容,如果未能解决你的问题,请参考以下文章
使用 RSA SHA 256 对字符串进行签名,仅将私钥作为字符串 .NET
如何使用我自己的 rsa 私钥使用 rs256 算法对字节进行签名?