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-Authenticate kihí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 (vagy None értéket hibás hitelesítő adatok esetén). A visszaadott objektum a request.g.current_user attribú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 BasicAuth pé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, a request.g.current_user pedig vagy a hitelesített felhasználóra, vagy None é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 Authorization fejlé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' a Bearer <token> értéket várja; egy egyéni fejléc közvetlenül a token értékét hordozza.

scheme

Az Authorization fejlé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 vagy None é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 TokenAuth pé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 a errorhandler() visszaadott). Siker esetén a hitelesített felhasználó a request.g.current_user attribú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, a request.g.current_user pedig vagy a hitelesített felhasználóra, vagy None é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 és TokenAuth számára. Az egyéni hitelesítési sémák alosztályozhatják.

auth_callback: Callable | None

A authenticate segítségével regisztrált visszahívás. None mindaddig, amíg az alkalmazás nem regisztrálja a visszahívást (egy függvény @auth.authenticate dekorá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 TokenAuth errorhandler metódusával, vagy közvetlenül egy egyéni BaseAuth alosztá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.