我正在开发一个Flask应用程序,它可以调用Flask开发的REST服务。使用基本身份验证来保护目标REST服务方法。我发现对于这种类型的身份验证,我必须使用base64编码。 我试图以这种方式将凭据传递给服务:
headers = {'username': base64.b64encode(g.user['username'])}
response = requests.post('http://127.0.0.1:3000/api/v1.0/follower/' + username, headers=headers)
在服务方面,用户名被提取为:
user_name = request.authorization.username
但是,该服务无法授权提供的凭据,并且会抛出错误401。 服务方和申请方的授权是否有任何问题?
答案 0 :(得分:2)
您没有创建正确的基本授权标头。
您必须调用标头Authorization
,然后将标头值设置为字符串Basic <base64-of-username-and-password-separated-by-a-colon>
。
如果我们假设一个空密码,那将是:
headers = {
'Authorization': 'Basic {}'.format(
base64.b64encode(
'{username}:{password}'.format(
username=g.user['username'],
password='')
)
),
}
请参阅协议客户端的Wikipedia description。
但是,无需手动构建,因为requests
会在您将用户名和密码作为元组传递给auth
关键字时为您创建标题:
response = requests.post(
'http://127.0.0.1:3000/api/v1.0/follower/' + username,
auth=(g.user['username'], ''))
答案 1 :(得分:0)
对我来说,有效的代码是,但是可能有一些错误。
headers = {
'Authorization': 'Basic {}'.format(
base64.b64encode(
'{username}:{password}'.format(
username=g.user['username'],
password='').encode()
).decode()
)
}