在烧瓶中请求授权

Request authorization in flask

我正在开发一个 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。

您必须调用 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

但是,无需手动构建,因为当您将用户名和密码作为元组传递给 auth 时,requests 会为您创建 header关键词:

response = requests.post(
    'http://127.0.0.1:3000/api/v1.0/follower/' + username,
    auth=(g.user['username'], ''))

对我来说,工作代码是,但可能有一些错误。

headers = {
        'Authorization': 'Basic {}'.format(
            base64.b64encode(
                '{username}:{password}'.format(
                    username=g.user['username'],
                    password='').encode()
            ).decode()
        )
}