生成用于使用Python进行API身份验证的令牌

时间:2020-05-28 16:45:14

标签: javascript python jwt token

我正在尝试使用Python创建API应用程序。 为了访问此API,应用必须生成一个令牌 格式为:<key>:<hash>:<epoch>

docs for the API使用javascript作为如何生成令牌的示例。

您可以在下面通过密钥和机密生成哈希 方式;

var hash = crypto.createHmac('sha256', secret).update(key + epoch).digest('base64');

1- Create sha256 hash from secret.
2- Update with key and epoch concatenated.
3- Return base64 representation.

然后可以将应用程序令牌添加到“授权”标头中 如下;

Authorization: A5-API <token>

似乎很简单,但是我的python代码导致401错误。

{'status': 401, 'name': 'NotAuthorizedError', 'message': 'You must use a valid A5 Authorisation token'}

似乎我以某种方式生成了无效的令牌,但是我已经经历了十几次, 看不出有什么问题。

我知道这不是密钥/秘密错误的问题,因为当我使用密钥/秘密进行测试时 在api dev网站上,令牌生成得很好。

所以我想知道是否有人可以注意到我使用的代码可能存在问题?

谢谢!

请在下面查看我的代码(已删除API密钥,机密和网址)。

import base64
import hashlib
import requests
import time
import urllib.parse

"""
auth-token example: 
A5-API 5eb77cd86erb50010f57c2ce:gUrQbsIV+S9Fyq8yIzAS+cl2Q3zizQLrFMDGq7zubaI=:1590105400
"""

key = <key>
secret = <secret>
epoch = str(time.mktime(time.localtime()))[:-2]

h = hashlib.sha256(secret.encode())
h_update = (key + epoch).encode('utf-8')
h.update(h_update)
hash_encode = base64.b64encode(h.digest())
hash_decode = hash_encode.decode('utf-8')
epoch = str(time.mktime(time.localtime()))[:-2]
token = f"{key}:{hash_decode}:{epoch}"
authorization =  f"A5-API {token}"

headers = {"Authorization": authorization }

url = <api url>

r = requests.get(url, headers = headers)

0 个答案:

没有答案