签名以请求jwt在python3中的API上使用

杰罗姆巴6

我尝试生成一个jwt令牌以连接到Transip api,但无法弄清楚如何生成签名作为请求。我宁愿在Python3中做到这一点。我应该怎么做?

Transip的Api文档,请参阅身份验证部分

我确实写了一些失败的代码:

#!/usr/bin/env python3

import OpenSSL


key='''-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDIYjaYtIh8EDSu
wmVxRaXm6gtA9cRGds2juYvO+za8oQ+36OS4J35Hig/XE0Zr1hrfjGfnuy3bubrj
zB/w3Hg4Kl63oBel/2HSmaNczR12dMGZzMqyHHXyZKl/cYjzhbgAucSM/q+inbuL
1gK0O9+Ov2Uc8iMfeRBG/XBNo5QVVzWYF+BSmojobawGMIR/LKKKJL6HNzdcz5yr
PAWR0HfukpwuZcehEJca/TLgUf/FoBfRKm+tFVyVNYB6v2kvI0ASMMhsnsEnQ0CX
0mi9cmyXB6iB/5SnwKkXZIwPXwmyXvSwIdZiTU70QNlfGKrIGuv5+fDNd1+g7XDV
yjzS9HObAgMBAAECggEAIDSQu8hAK1hbbz71GNhtyogRGPam/gA4GrlGfBSp/nUQ
VqmKoQJP7GWHGDUT218E4KrrRDY0L51RKS10cLyuYbCFmpOTWW2LJlLlC5Q3yQMI
3pQoe6nRVwzQpRf1P9Zc9Vjl+xcv2T3ql5Xkx1zcGFAwiw9rj7JgaFhxRTkmIquh
oyHkMHW74hSVlx55HhDtc1uTK3aWnEhKJfj/dRmA5Hald3ixoaASsZWA3ZTr7B8R
b/2mAGml+/dEYuspbkIZW9Bryv7UlpT2E9/7SpV8c05Spehl12EfMcJhaFJDe1G4
kkCqbl8Uks+jm9/aWSUIUzcHuZDw1PAiVqPVVcyfkQKBgQDtHp89U1QZBuAXI3KM
FOeOFUD+Vb4oLhTyWVsWE6jJjxfGVyGtIRNw6rHrHumlN8Fpb4ijEdvoNQkPiKnl
HYGnUp7BkbvpgncjL6b4br3b9cXtcpDHdTD5dAir+j3sDrVvAG6YXnuyZONOXxXm
oVp/sd+DBArBQFqHgQICOxgNowKBgQDYVsaZEoa22tuhrVfo5UxoRq+hAnMN5cTv
iGof1Qt2t2BYVEjpz2YpVQ/ksCHbtSVxRzw00qW4xzHNzxJ4JkDAlerxQy+nqBCp
emWMADs2H/ALTvCFaEA+rGLe+MYf0ANaw94AbR44jKNcGqMrwwVQpC9CY3/C0A9L
pg1ssZ/xqQKBgFZrG6QRE4xPeipUq/GryLx6uIY5H6WrLc0pjc3c+l4DPan2pXpg
nKJBlvhW+tZRHLddg9HSt2/IrHWx3CF5gIBH1z46695twxfazSKr0Zwx1aH1aBiZ
eHDhvitXd2vp7Gv5H1V+0dwxcrpkYyn70mzJmek49uZ5msTZ2q6PdPO7AoGAapi3
Wo1KW6cTOWLUQilZsLfDqi4uytZAZ1ZsFCtBbsmEa4F8O9i5mfwTzLcMt9lWDa7v
94cjqRxdae9yRkly9nHoReC5Bn9FVny8tHMYud6axLesw89OeJMwVHV4CgzQ2lRQ
ex1JGswRYjyt0c5SPB3qO2gTd8ZVAw1a6AfNq6ECgYB/tndONcYppD/j3278+3Wy
EV/P0CEBVrvXboUyxkFykZ5CFYkpNEisQ4Imu9PUGCOqSxxOoXQ2TyyzIb9nY1g1
K2Xs9J9sOEoGmmWJ+RJkHiwNkAIAbuYaluqtRyqY0w2z19JZKRv1u9vuWP1+f5G6
+5aF0x9Xgt2Tvq3T1caywg==
-----END PRIVATE KEY-----'''

data=b'{"login": "test-user","nonce": "98475920834"}'

signature=OpenSSL.crypto.sign(key,data,'sha512')
print (signature)

我得到的错误是

Traceback (most recent call last):
  File "./jwt.py", line 37, in <module>
    signatue=OpenSSL.crypto.sign(key,data,'sha512')
  File "/usr/local/lib/python3.7/dist-packages/OpenSSL/crypto.py", line 2825, in sign
    length = _lib.EVP_PKEY_size(pkey._pkey)
AttributeError: 'bytes' object has no attribute '_pkey'

这里发生了什么???

(ps密钥已不再有效,但仍然可以很好地用于创建单个密钥)

杰罗姆巴6

我确实找到了解决方案。

#!/usr/bin/env python3

from OpenSSL import crypto
import base64
key_file = open("test.pem", "r")
key = key_file.read()
key_file.close()
print(key)
print()
if key.startswith('-----BEGIN '):
    pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, key)
else:
    pkey = crypto.load_pkcs12(key).get_privatekey()
print (pkey)
print()
data = b'''{ "login": "usernam", "nonce": "98475920834" }'''
sign = crypto.sign(pkey, data, "sha512") 
print (sign)
print()
data_base64 = base64.b64encode(sign)
print (data_base64.decode())

这对我有用。:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用GraphQL正文在python3中发布请求

来自分类Dev

使用python3异步HTTP请求

来自分类Dev

python3中具有不同签名的多重继承

来自分类Dev

Python中的HMAC签名请求

来自分类Dev

主机名与自签名 ssl python3 请求不匹配

来自分类Dev

使用 OpenSSL 和 Python3 签名数据 - 无法验证签名数据

来自分类Dev

urllib2比python3中的请求慢吗

来自分类Dev

如何将Python3请求中的数据传递给VMware工作站API?

来自分类Dev

使用lamda在S3图片上传的签名网址上请求“ PUT”时出现403

来自分类Dev

在CSV库上使用Pandas处理Python3中的CSV文件

来自分类Dev

在Python中的API请求中使用变量

来自分类Dev

使用POST请求提交联系表单(请求和python3)

来自分类Dev

我在使用 AWS 签名版本 4 的 S3 PUT 请求中做错了什么

来自分类Dev

在Fedora 24中的vim上启用python3

来自分类Dev

在 python3 中在 PDF 上编写文本

来自分类Dev

如何使用pip在Python3上安装Flask?

来自分类Dev

在Linux上使用CRLF而不是LF的Python3 DictWriter

来自分类Dev

Bazel 0.26.1在py_test上使用Python3

来自分类Dev

在python3上安装/使用dask.array

来自分类Dev

在python3上使用递归的分形树

来自分类Dev

在 Python3 上使用 Pandas 未对齐的数据框

来自分类Dev

python3上的UnicodeDecodeError

来自分类Dev

Cygwin上的Python3

来自分类Dev

Python3请求-不起作用

来自分类Dev

多线程请求Python3

来自分类Dev

python3请求发布表格数据

来自分类Dev

Python3请求-不起作用

来自分类Dev

带有环境变量的curl请求有效,但在python3请求上失败

来自分类Dev

无效签名 - Google JWT API