【发布时间】:2017-01-02 22:47:03
【问题描述】:
我正在尝试在 django 中间件的帮助下进行 twitter 身份验证,我在其中计算这样的请求的签名 (https://dev.twitter.com/oauth/overview/creating-signatures):
key = b"MY_KEY&"
raw_init = "POST" + "&" + quote("https://api.twitter.com/1.1/oauth/request_token", safe='')
raw_params = <some_params>
raw_params = quote(raw_params, safe='')
#byte encoding for HMAC, otherwise it returns "expected bytes or bytearray, but got 'str'"
raw_final = bytes(raw_init + "&" + raw_params, encoding='utf-8')
hashed = hmac.new(key, raw_final, sha1)
request.raw_final = hashed
# here are my problems: I need a base64 encoded string, but get the error "'bytes' object has no attribute 'encode'"
request.auth_header = hashed.digest().encode("base64").rstrip('\n')
如您所见,无法对“字节”对象进行 base64 编码。
建议的解决方案在这里:Implementaion HMAC-SHA1 in python
【问题讨论】:
-
你试过了吗:
base64.encodestring(str(raw_final))? -
@Jean-FrançoisFabre 为什么我要编码 raw_final?我需要一个 HMAC 对象转换为 base64 字符串...所有这些都根据 twitter 文档 - dev.twitter.com/oauth/overview/creating-signatures 在页面的最底部
标签: python django twitter base64 hmacsha1