microdot.auth — HTTP-Authentifizierung¶
Dekoratoren, die Routen hinter eine HTTP-Authentifizierung stellen. Zwei Varianten: BasicAuth für das Schema Authorization: Basic <base64>, nach dem Browser nativ fragen, und TokenAuth für das Schema Authorization: Bearer <token>, das APIs verwenden.
Beide Klassen leiten sich von einer gemeinsamen Basisklasse BaseAuth ab; eine Anwendung erzeugt das Auth-Objekt, registriert mit authenticate() einen Authentifizierungs-Callback und dekoriert dann geschützte Routen mit der Auth-Instanz.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
HTTP Basic-Authentifizierung. Der Browser öffnet ein Dialogfenster für Benutzername / Passwort, wenn eine nicht authentifizierte Anfrage auf eine geschützte Route trifft, und sendet bei nachfolgenden Anfragen
Authorization: Basic <base64(user:pass)>.- realm
Die Realm-Zeichenkette, die der Browser neben der Eingabeaufforderung anzeigt.
- charset
Der im
WWW-Authenticate-Challenge angegebene Zeichensatz.- scheme
Name des Authentifizierungsschemas. Standard
'Basic'.- error_status
HTTP-Status, der bei fehlgeschlagener Authentifizierung zurückgegeben wird. Standard 401.
- authenticate(f)¶
Dekorator, der die Anmeldedatenprüfung registriert. f erhält
(request, username, password)und gibt das authentifizierte Benutzerobjekt zurück (oderNonebei ungültigen Anmeldedaten). Das zurückgegebene Objekt wird inrequest.g.current_usergespeichert.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)¶
Das Dekorieren einer Route mit der
BasicAuth-Instanz schützt sie:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Wie
__call__(), aber Anfragen ohne Anmeldedaten werden nicht abgelehnt – der Handler wird trotzdem ausgeführt, wobeirequest.g.current_userentweder auf den authentifizierten Benutzer oder aufNonegesetzt ist.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Bearer-Token-Authentifizierung. Clients senden ein Token im
Authorization-Header; die Anwendung validiert es gegen den von ihr bevorzugten Speicher.- header
Der Name des Headers, der das Token trägt. Der Standard
'Authorization'erwartet den WertBearer <token>; ein benutzerdefinierter Header trägt den Token-Wert direkt.- scheme
Auth-Schema für den
Authorization-Header. Standard'Bearer'.- error_status
HTTP-Status bei Authentifizierungsfehler. Standard 401.
- authenticate(f)¶
Dekorator, der die Token-Prüfung registriert. f erhält
(request, token)und gibt ein Benutzerobjekt oderNonezurück: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)¶
Dekorator, der die standardmäßige 401-Antwort überschreibt. f erhält das Anfrageobjekt und gibt eine Antwort zurück (oder bricht ab).
- __call__(f: Callable) Callable¶
Das Dekorieren einer Route mit der
TokenAuth-Instanz schützt sie. Anfragen ohne gültiges Token werden abgelehnt (standardmäßig 401, oder was auch immererrorhandler()zurückgegeben hat). Bei Erfolg befindet sich der authentifizierte Benutzer inrequest.g.current_user:@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Gibt den umschlossenen Handler zurück.
- optional(f: Callable) Callable¶
Wie
__call__(), aber Anfragen ohne Token werden nicht abgelehnt – der Handler wird trotzdem ausgeführt, wobeirequest.g.current_userentweder auf den authentifizierten Benutzer oder aufNonegesetzt ist. Nützlich für Routen, die ihre Ausgabe abhängig davon ändern, ob der Aufrufer authentifiziert ist, ohne dies zu erfordern:@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()
Gibt den umschlossenen Handler zurück.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Gemeinsame Basis für
BasicAuthundTokenAuth. Benutzerdefinierte Auth-Schemata können davon ableiten.- auth_callback: Callable | None¶
Der über
authenticateregistrierte Callback.None, bis die Anwendung den Callback registriert (das Dekorieren einer Funktion mit@auth.authenticatesetzt ihn).
- error_callback: Callable¶
Asynchrones Callable, das die bei einem Authentifizierungsfehler gesendete Antwort zurückgibt. Wird vom Konstruktor auf einen Standardwert gesetzt, der eine 401-Antwort zurückgibt; ersetze es über
errorhandlerbeiTokenAuthoder direkt in einer benutzerdefiniertenBaseAuth-Unterklasse.
Bei den dekorierten Routen wird request.g.current_user mit dem vom Authentifizierungs-Callback zurückgegebenen Wert gefüllt. Untersuche innerhalb der Route dieses Attribut, um den Aufrufer zu identifizieren.