如何使用 python 将私钥编码为 RS256 格式的 JSON WEB TOKEN
How to encode private key as JSON WEB TOKEN in RS256 format using python
嗯,我已经经历了很多问题,以及他们各自的答案,主要是代替私钥(从 -----BEGIN RSA PRIVATE KEY----- 开始)在 jwt 中编码,public 正在发送密钥(不是从 -----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')
它总是 return 出现 ValueError: cannot deserialize the data, 他们的 HS256 算法工作正常,但是当涉及到 RS256 时它不会,一些答案建议将其转换为 PEM 格式,但我的是已经采用该格式 (-----BEGIN RSA PRIVATE KEY----- (code) -----END RSA PRIVATE KEY-----)
这对我有用,而不是使用 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 = crypto_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 算法,有望工作
传递给 jwt.encode
的私钥必须是字节文字 b'"..."
。我怀疑您的代码正在传递一个字符串(它是 unicode 而不是 Python 中的字节)。
嗯,我已经经历了很多问题,以及他们各自的答案,主要是代替私钥(从 -----BEGIN RSA PRIVATE KEY----- 开始)在 jwt 中编码,public 正在发送密钥(不是从 -----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')
它总是 return 出现 ValueError: cannot deserialize the data, 他们的 HS256 算法工作正常,但是当涉及到 RS256 时它不会,一些答案建议将其转换为 PEM 格式,但我的是已经采用该格式 (-----BEGIN RSA PRIVATE KEY----- (code) -----END RSA PRIVATE KEY-----)
这对我有用,而不是使用 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 = crypto_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 算法,有望工作
传递给 jwt.encode
的私钥必须是字节文字 b'"..."
。我怀疑您的代码正在传递一个字符串(它是 unicode 而不是 Python 中的字节)。