microdot.auth — autentificare HTTP¶
Decoratori care restricționează rutele în spatele autentificării HTTP. Două variante: BasicAuth pentru schema Authorization: Basic <base64> pe care browserele o solicită nativ și TokenAuth pentru schema Authorization: Bearer <token> folosită de API-uri.
Ambele clase derivă dintr-o bază comună BaseAuth; o aplicație construiește obiectul de autentificare, înregistrează o funcție de retroapelare (callback) de autentificare cu authenticate(), apoi decorează rutele protejate cu instanța de autentificare.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
Autentificare HTTP Basic. Browserul afișează un dialog de nume de utilizator / parolă atunci când o cerere neautentificată ajunge la o rută protejată și trimite
Authorization: Basic <base64(user:pass)>în cererile ulterioare.- realm
Șirul realm pe care browserul îl afișează lângă prompt.
- charset
Setul de caractere anunțat în provocarea
WWW-Authenticate.- scheme
Numele schemei de autentificare. Implicit
'Basic'.- error_status
Statusul HTTP returnat la o autentificare eșuată. Implicit 401.
- authenticate(f)¶
Decorator care înregistrează verificarea credențialelor. f primește
(request, username, password)și returnează obiectul utilizator autentificat (sauNonela credențiale incorecte). Obiectul returnat este stocat înrequest.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)¶
Decorarea unei rute cu instanța
BasicAutho protejează:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Asemănător cu
__call__(), dar nu respinge cererile care nu au credențiale – handlerul rulează în continuare, curequest.g.current_usersetat fie la utilizatorul autentificat, fie laNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Autentificare cu token de tip Bearer. Clienții trimit un token în antetul
Authorization; aplicația îl validează față de orice depozit de stocare dorește.- header
Numele antetului care transportă tokenul. Valoarea implicită
'Authorization'așteaptă valoareaBearer <token>; un antet personalizat transportă direct valoarea tokenului.- scheme
Schema de autentificare pentru antetul
Authorization. Implicit'Bearer'.- error_status
Statusul HTTP la eșecul autentificării. Implicit 401.
- authenticate(f)¶
Decorator care înregistrează verificarea tokenului. f primește
(request, token)și returnează un obiect utilizator sauNoneimport 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)¶
Decorator care suprascrie răspunsul implicit 401. f primește obiectul cerere și returnează un răspuns (sau abandonează).
- __call__(f: Callable) Callable¶
Decorarea unei rute cu instanța
TokenAutho protejează. Cererile fără un token valid sunt respinse (implicit 401 sau orice a returnaterrorhandler()). În caz de succes, utilizatorul autentificat se află înrequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Returnează handlerul împachetat.
- optional(f: Callable) Callable¶
Asemănător cu
__call__(), dar nu respinge cererile care nu au un token – handlerul rulează în continuare, curequest.g.current_usersetat fie la utilizatorul autentificat, fie laNone. Util pentru rutele care își schimbă ieșirea în funcție de faptul dacă apelantul este autentificat, fără a impune acest lucru:@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()
Returnează handlerul împachetat.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Bază comună pentru
BasicAuthșiTokenAuth. Schemele de autentificare personalizate o pot extinde prin moștenire.- auth_callback: Callable | None¶
Funcția de retroapelare (callback) înregistrată prin
authenticate.Nonepână când aplicația înregistrează callback-ul (decorarea unei funcții cu@auth.authenticateeste ceea ce o setează).
- error_callback: Callable¶
Apelabil asincron care returnează răspunsul trimis la eșecul autentificării. Setat de constructor la o valoare implicită care returnează un răspuns 401; înlocuiește-l prin
errorhandlerpeTokenAuthsau direct pe o subclasă personalizatăBaseAuth.
Rutele decorate primesc request.g.current_user populat cu valoarea returnată de funcția de retroapelare (callback) de autentificare. În interiorul rutei, inspectează acest atribut pentru a identifica apelantul.