python - 在 flask 中请求授权

标签 python python-2.7 flask werkzeug

我正在开发一个 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。
服务端和应用端的授权有没有问题?

最佳答案

您没有创建正确的基本授权 header 。

您必须调用标题 Authorization ,然后将 header 值设置为字符串 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协议(protocol)的客户端。

但是,无需手动构建,如 requests当您将用户名和密码作为元组传递给 auth 时,将为您创建标题。关键词:
response = requests.post(
    'http://127.0.0.1:3000/api/v1.0/follower/' + username,
    auth=(g.user['username'], ''))

关于python - 在 flask 中请求授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267744/

相关文章:

python - 在 python 函数调用的参数列表中嵌套生成器表达式

Python:在乌龟中一次使用多种颜色

python - 如何更改 seaborn 联合图中的十六进制大小? (六边形本身,而不是垃圾箱)

python - 处理 Python ArgumentParser 中的错误

javascript - 将存储在 S3 上的文件流式传输到客户端,而无需将其下载到 Flask 服务器

python - Pygame 如何去掉动画周围的盒子?

python - 如何修复数据帧的 "index out of bounds"错误?

python : Import modules once then share with several files

sockets - Nginx 和 Flask-socketio Websockets : Alive but not Messaging?

python - 如何让用户保持在 session 中