microdot.auth — Autenticación HTTP¶
Decoradores que protegen rutas mediante autenticación HTTP. Dos variantes: BasicAuth para el esquema Authorization: Basic <base64> que los navegadores solicitan de forma nativa, y TokenAuth para el esquema Authorization: Bearer <token> que utilizan las API.
Ambas clases derivan de una base común BaseAuth; una aplicación construye el objeto de autenticación, registra una función de retorno (callback) de autenticación con authenticate() y luego decora las rutas protegidas con la instancia de autenticación.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
Autenticación HTTP Basic. El navegador muestra un cuadro de diálogo de nombre de usuario / contraseña cuando una solicitud no autenticada llega a una ruta protegida y envía
Authorization: Basic <base64(user:pass)>en las solicitudes posteriores.- realm
La cadena de realm que el navegador muestra junto a la solicitud.
- charset
Conjunto de caracteres anunciado en el desafío
WWW-Authenticate.- scheme
Nombre del esquema de autenticación. Por defecto
'Basic'.- error_status
Estado HTTP devuelto cuando falla la autenticación. Por defecto 401.
- authenticate(f)¶
Decorador que registra la verificación de credenciales. f recibe
(request, username, password)y devuelve el objeto de usuario autenticado (oNonesi las credenciales son incorrectas). El objeto devuelto se almacena enrequest.g.current_user.basic = BasicAuth(realm='Camera') @basic.authenticate async def check(request, username, password): user = users.get(username) if user and user.check_password(password): return user
- __call__(f)¶
Decorar una ruta con la instancia de
BasicAuthla protege:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Como
__call__(), pero no rechaza las solicitudes que carecen de credenciales: el controlador se ejecuta igualmente, conrequest.g.current_userestablecido en el usuario autenticado o enNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Autenticación mediante token Bearer. Los clientes envían un token en el encabezado
Authorization; la aplicación lo valida contra el almacén de respaldo que prefiera.- header
El nombre del encabezado que transporta el token. El valor predeterminado
'Authorization'espera el valorBearer <token>; un encabezado personalizado transporta el valor del token directamente.- scheme
Esquema de autenticación para el encabezado
Authorization. Por defecto'Bearer'.- error_status
Estado HTTP cuando falla la autenticación. Por defecto 401.
- authenticate(f)¶
Decorador que registra la verificación del token. f recibe
(request, token)y devuelve un objeto de usuario oNone:import jwt tokens = TokenAuth() @tokens.authenticate async def check(request, token): try: claims = jwt.decode(token, SECRET) except jwt.exceptions.PyJWTError: return None return claims['sub']
- errorhandler(f)¶
Decorador que anula la respuesta 401 predeterminada. f recibe el objeto de solicitud y devuelve una respuesta (o aborta).
- __call__(f: Callable) Callable¶
Decorar una ruta con la instancia de
TokenAuthla protege. Las solicitudes sin un token válido se rechazan (401 por defecto, o lo que sea que haya devueltoerrorhandler()). En caso de éxito, el usuario autenticado se encuentra enrequest.g.current_user:@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Devuelve el controlador envuelto.
- optional(f: Callable) Callable¶
Como
__call__(), pero no rechaza las solicitudes que carecen de token: el controlador se ejecuta igualmente, conrequest.g.current_userestablecido en el usuario autenticado o enNone. Útil para rutas que cambian su salida según si el llamante está autenticado, sin exigirlo:@app.get('/api/feed') @tokens.optional async def feed(request): if request.g.current_user: return personalized_feed(request.g.current_user) return public_feed()
Devuelve el controlador envuelto.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Base común para
BasicAuthyTokenAuth. Los esquemas de autenticación personalizados pueden heredar de ella.- auth_callback: Callable | None¶
La función de retorno (callback) registrada mediante
authenticate. EsNonehasta que la aplicación registra la función de retorno (decorar una función con@auth.authenticatees lo que la establece).
- error_callback: Callable¶
Callable asíncrono que devuelve la respuesta enviada cuando falla la autenticación. El constructor lo establece en un valor predeterminado que devuelve una respuesta 401; reemplácelo mediante
errorhandlerenTokenAuth, o directamente en una subclase personalizada deBaseAuth.
Las rutas decoradas obtienen request.g.current_user rellenado con el valor devuelto por la función de retorno de autenticación. Dentro de la ruta, inspeccione ese atributo para identificar al llamante.