首页 > 解决方案 > 生成 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

标签: pythonpython-3.xoauth-2.0

解决方案


推荐阅读