Python 它是如何工作的?

Python 它是如何工作的?,python,login,flask,basic-authentication,Python,Login,Flask,Basic Authentication,我正在尝试使用Flask和HTTP Basic Auth创建一个登录系统。我的问题是,我的责任是从数据库中提供用户信息,还是basicauth为我创建和访问这些数据库?如果没有,我可以用什么来做 Werkzeug可以为您将基本授权标题解码为用户名和密码。剩下的就由你来决定你想用这些信息做什么 返回一个。对于基本身份验证标头,仅设置用户名和密码 像这样的项目可以帮助您使用基本授权管理更复杂的登录,并将其与您提供的用户模型相结合。该模型可以存储在数据库中,也可以存储在您希望的任何其他地方 您还可以查

我正在尝试使用Flask和HTTP Basic Auth创建一个登录系统。我的问题是,我的责任是从数据库中提供用户信息,还是basicauth为我创建和访问这些数据库?如果没有,我可以用什么来做

Werkzeug可以为您将基本授权标题解码为用户名和密码。剩下的就由你来决定你想用这些信息做什么

返回一个。对于基本身份验证标头,仅设置
用户名
密码

像这样的项目可以帮助您使用基本授权管理更复杂的登录,并将其与您提供的用户模型相结合。该模型可以存储在数据库中,也可以存储在您希望的任何其他地方

您还可以查看一个更全面集成的安全软件包,该软件包使用Flask Login和其他软件包提供基本身份验证和基于会话的登录。

扩展(无耻插件,我是作者)简化了HTTP Basic Auth的实现。与直接使用
请求.授权
数据不同,您可以在插入身份验证逻辑的位置设置回调函数


关于您的数据库问题,Flask HTTPAuth对用户的存储方式没有任何假设。您必须提供检索用户和验证密码的逻辑。

Werkzeug将
Authorization
头解析为
request.Authorization
,这是一个对象

出于安全原因,浏览器只有在第一次收到401错误响应且设置了
WWW-Authenticate
头时,才可能发送此头。另一个客户端(如请求库)将直接发送头

最简单的演示是一个decorator,它检查
request.authorization
,如果未设置,或者凭据无效,则返回401响应。实际上,您应该使用诸如或之类的扩展来管理此功能

from functools import wraps
from flask import request

def login_required(f):
    @wraps(f)
    def wrapped_view(**kwargs):
        auth = request.authorization
        if not (auth and check_auth(auth.username, auth.password)):
            return ('Unauthorized', 401, {
                'WWW-Authenticate': 'Basic realm="Login Required"'
            })

        return f(**kwargs)

    return wrapped_view

@app.route('/secret')
@login_required
def secret():
    return f'Logged in as {request.authorization.username}.'
导入请求
response=requests.get('http://127.0.0.1:5000/secret,auth=('world','hello'))
打印(response.text)
#以world身份登录。

basicauth是与服务器交换用户名和密码的标准。。它不会提供用户信息进行身份验证,不会。