microdot.auth — HTTP autentizace¶
Dekorátory, které chrání trasy za HTTP autentizací. Dvě varianty: BasicAuth pro schéma Authorization: Basic <base64>, na které se prohlížeče nativně ptají, a TokenAuth pro schéma Authorization: Bearer <token>, které používají API.
Obě třídy odvozují ze společné základní třídy BaseAuth; aplikace vytvoří autentizační objekt, zaregistruje autentizační callback pomocí authenticate() a poté chráněné trasy dekoruje instancí autentizace.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
HTTP Basic autentizace. Prohlížeč zobrazí dialog s uživatelským jménem / heslem, když neautentizovaný požadavek narazí na chráněnou trasu, a u následujících požadavků odesílá
Authorization: Basic <base64(user:pass)>.- realm
Řetězec realm, který prohlížeč zobrazí vedle výzvy.
- charset
Znaková sada inzerovaná ve výzvě
WWW-Authenticate.- scheme
Název autentizačního schématu. Výchozí
'Basic'.- error_status
HTTP status vrácený při neúspěšné autentizaci. Výchozí 401.
- authenticate(f)¶
Dekorátor, který registruje kontrolu přihlašovacích údajů. f přijímá
(request, username, password)a vrací autentizovaný uživatelský objekt (neboNonepři nesprávných údajích). Vrácený objekt je uložen vrequest.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)¶
Dekorování trasy instancí
BasicAuthji chrání:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Jako
__call__(), ale neodmítá požadavky, které postrádají přihlašovací údaje – handler se přesto spustí, přičemžrequest.g.current_userje nastaveno buď na autentizovaného uživatele, nebo naNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Autentizace pomocí Bearer tokenu. Klienti odesílají token v hlavičce
Authorization; aplikace jej ověří vůči libovolnému úložišti, které jí vyhovuje.- header
Název hlavičky nesoucí token. Výchozí
'Authorization'očekává hodnotuBearer <token>; vlastní hlavička nese hodnotu tokenu přímo.- scheme
Autentizační schéma pro hlavičku
Authorization. Výchozí'Bearer'.- error_status
HTTP status při selhání autentizace. Výchozí 401.
- authenticate(f)¶
Dekorátor, který registruje kontrolu tokenu. f přijímá
(request, token)a vrací uživatelský objekt neboNoneimport 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, který přepisuje výchozí odpověď 401. f přijímá objekt požadavku a vrací odpověď (nebo přeruší zpracování).
- __call__(f: Callable) Callable¶
Dekorování trasy instancí
TokenAuthji chrání. Požadavky bez platného tokenu jsou odmítnuty (ve výchozím nastavení 401, nebo cokoli vrátilerrorhandler()). Při úspěchu je autentizovaný uživatel vrequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Vrátí obalený handler.
- optional(f: Callable) Callable¶
Jako
__call__(), ale neodmítá požadavky, které postrádají token – handler se přesto spustí, přičemžrequest.g.current_userje nastaveno buď na autentizovaného uživatele, nebo naNone. Užitečné pro trasy, které mění svůj výstup podle toho, zda je volající autentizován, aniž by to vyžadovaly:@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()
Vrátí obalený handler.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Společný základ pro
BasicAuthaTokenAuth. Vlastní autentizační schémata jej mohou rozšířit.- auth_callback: Callable | None¶
Callback registrovaný přes
authenticate.None, dokud aplikace callback nezaregistruje (nastavuje jej dekorování funkce pomocí@auth.authenticate).
- error_callback: Callable¶
Asynchronní volatelný objekt vracející odpověď odeslanou při selhání autentizace. Konstruktorem nastaven na výchozí hodnotu, která vrací odpověď 401; nahraďte jej pomocí
errorhandlernaTokenAuthnebo přímo na vlastní podtříděBaseAuth.
Dekorovaným trasám se request.g.current_user naplní hodnotou vrácenou z autentizačního callbacku. Uvnitř trasy zkontrolujte tento atribut k identifikaci volajícího.