python - 生成 oAuth 令牌的 pythonic 方式是什么?
问题描述
对于这个例子,我将使用 shipstation 的api,但这个问题适用于任何使用 oAuth 令牌的 api。
ShipStation API 使用基本 HTTP 身份验证。Authorization 标头的构造如下:
用户名 (
API_KEY
) 和密码 (API_SECRET
) 组合成一个字符串 "username:password"然后使用 Base64 的 RFC2045-MIME 变体对生成的字符串进行编码,但不限于 76 个字符/行
然后将授权方法和一个空格(即“Basic”)放在编码字符串之前。
例如,如果
API_KEY
给定的是 'ShipStation' 并且API_SECRET
是 'Rocks',那么标题的格式如下:授权:基本 U2hpcFN0YXRpb246Um9ja3M=
容易吧?我的第一次尝试:
import base64
KEY = 'ShipStation'
SECRET = 'Rocks'
AUTH = bytes(str(KEY) + ':' + str(SECRET), encoding='utf-8')
TOKEN = base64.b64encode(AUTH)
AUTH_TOKEN = 'Basic ' + str(TOKEN)
print(AUTH_TOKEN) # Basic b'U2hpcFN0YXRpb246Um9ja3M='
如您所见,AUTH_TOKEN
我所做b'
的开头和'
结尾都有一个附加内容,当您发送请求时会导致 401。
这是我对此的解决方法:
import base64
KEY = 'ShipStation'
SECRET = 'Rocks'
AUTH = bytes(str(KEY) + ':' + str(SECRET), encoding='utf-8')
TOKEN = str(base64.b64encode(AUTH))
AUTH_TOKEN = 'Basic ' + TOKEN[2:len(TOKEN)-1]
print(AUTH_TOKEN) # Basic U2hpcFN0YXRpb246Um9ja3M=
虽然上面的代码有效,但这显然不是它打算完成的方式。(我假设?)
TLDR;
将上面示例中的转换为正确格式的pythonic方法是什么?TOKEN
解决方案
推荐阅读
- elasticsearch - ELK 堆栈中的 Logstash 和 filebeat
- reactjs - 有没有办法关闭 LinkedIn 验证器代码?
- python - 从 pandas 数据框列中的 pandas.core.series.Series 中提取日期
- excel - 如何在django中用空格指定列名
- c# - 接口不能隐式转换类型
- php - 使用 AJAX 和 jQuery 验证 From 而不将数据发送到另一个文件
- python - 使用python将vti图像文件转换为vtk?
- javascript - 从反应路由中的组件调用函数
- kubernetes - 动态更新 POD 的节点选择器字段
- eclipse - 将 SuiteCloud IDE 安装到 Eclipse 中