生成oAuth令牌的pythonic方法是什么?

时间:2019-03-07 22:27:44

标签: python python-3.x oauth-2.0

在此示例中,我将使用shipstation的api,但此问题适用于所有使用oAuth令牌的api。

  

ShipStation API使用基本HTTP身份验证。 Authorization标头的构造如下:

     
      
  • 用户名(API_KEY)和密码(API_SECRET)组合成字符串“ username:password”

  •   
  • 然后使用Base64的RFC2045-MIME变体对结果字符串进行编码,但不限于76个字符/行

  •   
  • 然后将授权方法和空格(即“基本”)放在编码的字符串之前。

  •   
     

例如,如果给定的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;

将上面示例中的TOKEN转换为正确格式的 pythonic 方法是什么?

0 个答案:

没有答案