安全地传递用于API身份验证的凭据-Python 3

时间:2018-09-25 15:19:02

标签: python api authentication python-requests restful-authentication

在Python 3中,我正在传递凭据以对API调用进行身份验证,并且使用以下行可以完全正常工作:

userAndPass = b64encode(b"username:password").decode("ascii")

出于安全目的,我更愿意在外部存储凭据(可能是yaml文件或其他位置),而不是对其进行硬编码。我试图替换用户名并使用变量传递,但这似乎不起作用。我试过将变量“凭据”放在方括号中,并尝试在手前添加一个加号,但均无效。

我希望它可以按以下方式工作:

credentials = "username:password"
userAndPass = b64encode(b'credentails').decode("ascii")

任何建议都值得赞赏!

2 个答案:

答案 0 :(得分:2)

在这种情况下,您以错误的方式传递了变量。

b64encode(b'credentails')的意思是对字节数组[c,r,e,d,e,n,t,i,a,l,s]进行编码。

像这样使用它:

credentials = b"username:password" userAndPass = b64encode(credentails).decode("ascii")

编辑:

如果您希望以其他方式获得凭证:

credentials = somehow_get_credentials_as_string() bytes_credentials = credentials.encode('utf-8') # or whatever the encoding is userAndPass = b64encode(bytes_credentials).decode("ascii")

答案 1 :(得分:1)

requests可让您传递auth元组,例如:

username = 'Antonio'
password = 'xx1234xx'
user_pass = (username, password)

res = requests.get('https://www.example.com/fetch', auth=user_pass)