【问题标题】:I would like to generate a jwt for transip api [closed]我想为 transip api 生成一个 jwt [关闭]
【发布时间】:2020-06-18 12:09:54
【问题描述】:

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

Api documentation of transip 并查看身份验证部分

根据 AKX 的第一个答案,我确实编写了一些失败的代码:

#!/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"}'

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

我得到的错误是

Traceback(最近一次调用最后一次):文件“./jwt.py”,第 37 行,在 signatue=OpenSSL.crypto.sign(key,data,'sha512') 文件“/usr/local/lib/python3.7/dist-packages/OpenSSL/crypto.py”,第 2825 行, 标志 length = _lib.EVP_PKEY_size(pkey._pkey) AttributeError: 'bytes' 对象没有属性 '_pkey'

这是怎么回事???

(p.s. 密钥不再有效,但仍可用于创建签名)

【问题讨论】:

    标签: python api signature asn.1 sha512


    【解决方案1】:

    根据链接的文档,您不能直接生成所需的 Bearer JWT 令牌,但您可以从 TransIP 的 API 中获取。

    要获取访问令牌,[...] 向“https://api.transip.nl/v6/auth”发送一个 HTTP POST 请求,其中包含您的登录名和随机数(任何随机字符串)以及签名标头。签名标头应包含完整请求正文的 sha512 asn.1 哈希。使用在控制面板中生成的私钥对其进行加密。

    您将需要使用 PyOpenSSL 或其他加密库来生成 ASN.1 签名,然后使用例如发送请求。 requests 库,然后使用返回的令牌。

    【讨论】:

    猜你喜欢
    • 2018-10-18
    • 1970-01-01
    • 2019-10-23
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多