microdot.auth — HTTP-hitelesítés¶
Olyan dekorátorok, amelyek HTTP-hitelesítés mögé zárják az útvonalakat. Két változat: BasicAuth az Authorization: Basic <base64> séma számára, amelyhez a böngészők natívan kérnek bejelentkezést, és TokenAuth az Authorization: Bearer <token> séma számára, amelyet az API-k használnak.
Mindkét osztály egy közös BaseAuth alaposztályból származik; az alkalmazás létrehozza a hitelesítési objektumot, regisztrál egy hitelesítési visszahívást a authenticate() segítségével, majd a hitelesítési példánnyal dekorálja a védett útvonalakat.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
HTTP Basic hitelesítés. A böngésző felhasználónév/jelszó párbeszédablakot jelenít meg, amikor egy nem hitelesített kérés védett útvonalat ér el, és a további kérésekkel elküldi az
Authorization: Basic <base64(user:pass)>fejlécet.- realm
A realm-karakterlánc, amelyet a böngésző a beviteli kérés mellett megjelenít.
- charset
A
WWW-Authenticatekihívásban meghirdetett karakterkészlet.- scheme
A hitelesítési séma neve. Alapértelmezett
'Basic'.- error_status
Sikertelen hitelesítés esetén visszaadott HTTP-állapot. Alapértelmezett 401.
- authenticate(f)¶
Dekorátor, amely regisztrálja a hitelesítő adatok ellenőrzését. f az
(request, username, password)paramétereket veszi, és visszaadja a hitelesített felhasználói objektumot (vagyNoneértéket hibás hitelesítő adatok esetén). A visszaadott objektum arequest.g.current_userattribútumban tárolódik.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)¶
Egy útvonal
BasicAuthpéldánnyal való dekorálása védetté teszi azt:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Hasonló a
__call__()metódushoz, de nem utasítja el a hitelesítő adatok nélküli kéréseket – a kezelő ekkor is lefut, arequest.g.current_userpedig vagy a hitelesített felhasználóra, vagyNoneértékre lesz beállítva.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Bearer-token alapú hitelesítés. A kliensek egy tokent küldenek az
Authorizationfejlécben; az alkalmazás ezt a tetszőleges háttértárolójával szemben validálja.- header
A tokent hordozó fejléc neve. Az alapértelmezett
'Authorization'aBearer <token>értéket várja; egy egyéni fejléc közvetlenül a token értékét hordozza.- scheme
Az
Authorizationfejléc hitelesítési sémája. Alapértelmezett'Bearer'.- error_status
HTTP-állapot hitelesítési hiba esetén. Alapértelmezett 401.
- authenticate(f)¶
Dekorátor, amely regisztrálja a token ellenőrzését. f a
(request, token)paramétereket veszi, és egy felhasználói objektumot vagyNoneértéket ad vissza: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)¶
Dekorátor, amely felülírja az alapértelmezett 401-es választ. f a kérésobjektumot veszi, és egy választ ad vissza (vagy megszakít).
- __call__(f: Callable) Callable¶
Egy útvonal
TokenAuthpéldánnyal való dekorálása védetté teszi azt. Az érvényes token nélküli kérések elutasításra kerülnek (alapértelmezetten 401-gyel, vagy bármivel, amit aerrorhandler()visszaadott). Siker esetén a hitelesített felhasználó arequest.g.current_userattribútumban található:@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Visszaadja a becsomagolt kezelőt.
- optional(f: Callable) Callable¶
Hasonló a
__call__()metódushoz, de nem utasítja el a token nélküli kéréseket – a kezelő ekkor is lefut, arequest.g.current_userpedig vagy a hitelesített felhasználóra, vagyNoneértékre lesz beállítva. Hasznos olyan útvonalakhoz, amelyek a kimenetüket aszerint változtatják, hogy a hívó fél hitelesített-e, anélkül, hogy ezt megkövetelnék:@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()
Visszaadja a becsomagolt kezelőt.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Közös alaposztály a
BasicAuthésTokenAuthszámára. Az egyéni hitelesítési sémák alosztályozhatják.- auth_callback: Callable | None¶
A
authenticatesegítségével regisztrált visszahívás.Nonemindaddig, amíg az alkalmazás nem regisztrálja a visszahívást (egy függvény@auth.authenticatedekorálása állítja be).
- error_callback: Callable¶
Aszinkron hívható objektum, amely a hitelesítési hiba esetén küldött választ adja vissza. A konstruktor egy alapértelmezett értékre állítja be, amely 401-es választ ad vissza; cseréld le a
TokenAutherrorhandlermetódusával, vagy közvetlenül egy egyéniBaseAuthalosztályon.
A dekorált útvonalak request.g.current_user attribútuma a hitelesítési visszahívásból visszaadott értékkel töltődik fel. Az útvonalon belül vizsgáld meg ezt az attribútumot a hívó fél azonosításához.