microdot.auth — authentification HTTP¶
Décorateurs qui protègent les routes derrière une authentification HTTP. Deux variantes : BasicAuth pour le schéma Authorization: Basic <base64> que les navigateurs proposent nativement, et TokenAuth pour le schéma Authorization: Bearer <token> utilisé par les API.
Les deux classes dérivent d’une base commune BaseAuth ; une application construit l’objet d’authentification, enregistre une fonction de rappel d’authentification avec authenticate(), puis décore les routes protégées avec l’instance d’authentification.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
Authentification HTTP Basic. Le navigateur affiche une boîte de dialogue nom d’utilisateur / mot de passe lorsqu’une requête non authentifiée atteint une route protégée et envoie
Authorization: Basic <base64(user:pass)>lors des requêtes suivantes.- realm
La chaîne realm que le navigateur affiche à côté de l’invite.
- charset
Jeu de caractères annoncé dans le défi
WWW-Authenticate.- scheme
Nom du schéma d’authentification. Par défaut
'Basic'.- error_status
Statut HTTP renvoyé en cas d’échec de l’authentification. Par défaut 401.
- authenticate(f)¶
Décorateur qui enregistre la vérification des identifiants. f prend
(request, username, password)et renvoie l’objet utilisateur authentifié (ouNoneen cas de mauvais identifiants). L’objet renvoyé est stocké dansrequest.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)¶
Décorer une route avec l’instance
BasicAuthla protège@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Comme
__call__(), mais ne rejette pas les requêtes dépourvues d’identifiants – le gestionnaire s’exécute quand même, avecrequest.g.current_userdéfini soit sur l’utilisateur authentifié, soit surNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Authentification par jeton Bearer. Les clients envoient un jeton dans l’en-tête
Authorization; l’application le valide auprès du magasin de son choix.- header
Le nom de l’en-tête portant le jeton. La valeur par défaut
'Authorization'attend la valeurBearer <token>; un en-tête personnalisé porte directement la valeur du jeton.- scheme
Schéma d’authentification pour l’en-tête
Authorization. Par défaut'Bearer'.- error_status
Statut HTTP en cas d’échec d’authentification. Par défaut 401.
- authenticate(f)¶
Décorateur qui enregistre la vérification du jeton. f prend
(request, token)et renvoie un objet utilisateur ouNoneimport 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)¶
Décorateur qui remplace la réponse 401 par défaut. f prend l’objet requête et renvoie une réponse (ou interrompt).
- __call__(f: Callable) Callable¶
Décorer une route avec l’instance
TokenAuthla protège. Les requêtes sans jeton valide sont rejetées (401 par défaut, ou ce queerrorhandler()a renvoyé). En cas de succès, l’utilisateur authentifié se trouve dansrequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Renvoie le gestionnaire enveloppé.
- optional(f: Callable) Callable¶
Comme
__call__(), mais ne rejette pas les requêtes dépourvues de jeton – le gestionnaire s’exécute quand même, avecrequest.g.current_userdéfini soit sur l’utilisateur authentifié, soit surNone. Utile pour les routes qui modifient leur sortie selon que l’appelant est authentifié ou non sans l’exiger@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()
Renvoie le gestionnaire enveloppé.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Base commune pour
BasicAuthetTokenAuth. Les schémas d’authentification personnalisés peuvent en hériter.- auth_callback: Callable | None¶
La fonction de rappel enregistrée via
authenticate.Nonetant que l’application n’enregistre pas la fonction de rappel (décorer une fonction avec@auth.authenticateest ce qui la définit).
- error_callback: Callable¶
Appelable asynchrone renvoyant la réponse envoyée en cas d’échec d’authentification. Définie par le constructeur sur une valeur par défaut qui renvoie une réponse 401 ; remplacez-la via
errorhandlersurTokenAuth, ou directement sur une sous-classeBaseAuthpersonnalisée.
Les routes décorées reçoivent request.g.current_user rempli avec la valeur renvoyée par la fonction de rappel d’authentification. À l’intérieur de la route, inspectez cet attribut pour identifier l’appelant.