Frask HTTP Basicauth – ¿Cómo funciona?

Estoy tratando de crear un sistema de inicio de sesión utilizando Flask y HTTP Basic Auth. Mi pregunta es: ¿es mi responsabilidad proporcionar información de usuario de las bases de datos, o basicauth crea y accede a esas bases de datos para mí? Si no es así, ¿qué puedo usar para hacer eso?

Werkzeug puede decodificar el encabezado de la Autorización básica para usted, en el nombre de usuario y la contraseña. El rest depende de usted para ver qué quiere hacer con esa información.

El atributo request.authorization devuelve un objeto de Authorization . Para los encabezados de autenticación básicos, solo se configuran el username y la password .

Está disponible un simple fragmento de Flask que utiliza ese objeto en un decorador para proteger las rutas de Flask contra alguna información codificada.

Un proyecto como Flask-Login puede ayudarlo a administrar inicios de sesión más complejos con Autorización Básica, y vincularlo con el modelo de usuario que proporcione. Ese modelo se puede almacenar en una base de datos o cualquier otra cosa que desee.

Y puede buscar en Flask-Security un paquete de seguridad más integrado que use Flask-Login y otros paquetes para proporcionar autenticación básica y inicios de sesión basados ​​en sesión.

La extensión Flask-HTTPAuth (conector descarado, soy el autor) simplifica la implementación de la autenticación básica HTTP. En lugar de trabajar con la request.authorization datos de request.authorization directamente configuran las funciones de callback donde se conecta la lógica de autenticación.

Con respecto a su pregunta de base de datos, Flask-HTTPAuth no hace suposiciones sobre cómo se almacenan sus usuarios. Debe proporcionar la lógica que recupera a los usuarios y valida las contraseñas.

Werkzeug analiza el encabezado de Authorization en request.authorization , que es un objeto de Authorization .

Por razones de seguridad, un navegador solo puede enviar este encabezado si primero recibió una respuesta de error 401 con un conjunto de encabezados WWW-Authenticate . Un cliente diferente, como la biblioteca de solicitudes, enviará el encabezado directamente.

La demostración más simple de esto es un decorador que verifica la request.authorization y devuelve una respuesta 401 si no está establecida o si las credenciales no son válidas. En la práctica, debe usar una extensión como Flask-Login o Flask-HTTPAuth para gestionar esto.

 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': '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}.' 
 import requests response = requests.get('http://127.0.0.1:5000/secret', auth=('world', 'hello')) print(response.text) # Logged in as world.