microdot.auth — HTTP autentifikacija

Dekoratori koji štite rute iza HTTP autentifikacije. Dvije inačice: BasicAuth za shemu Authorization: Basic <base64> koju preglednici izvorno traže, i TokenAuth za shemu Authorization: Bearer <token> koju koriste API-ji.

Obje klase izvedene su iz zajedničke osnovne klase BaseAuth; aplikacija konstruira auth objekt, registrira povratni poziv za autentifikaciju pomoću authenticate(), a zatim dekorira zaštićene rute auth instancom.

class BasicAuth

class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)

HTTP Basic autentifikacija. Preglednik prikazuje dijalog za korisničko ime / lozinku kada neautenticirani zahtjev pogodi zaštićenu rutu i šalje Authorization: Basic <base64(user:pass)> na sljedećim zahtjevima.

realm

Niz područja (realm) koji preglednik prikazuje pored upita.

charset

Skup znakova oglašen u izazovu WWW-Authenticate.

scheme

Naziv sheme autentifikacije. Zadano 'Basic'.

error_status

HTTP status vraćen pri neuspjeloj autentifikaciji. Zadano 401.

authenticate(f)

Dekorator koji registrira provjeru vjerodajnica. f prima (request, username, password) i vraća objekt autenticiranog korisnika (ili None pri pogrešnim vjerodajnicama). Vraćeni objekt sprema se u request.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)

Dekoriranje rute instancom BasicAuth štiti je:

@app.route('/admin')
@basic
def admin(request):
    return 'hello ' + request.g.current_user.name
optional(f)

Poput __call__(), ali ne odbija zahtjeve kojima nedostaju vjerodajnice – rukovatelj se i dalje izvršava, s request.g.current_user postavljenim na autenticiranog korisnika ili na None.

class TokenAuth

class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)

Autentifikacija putem Bearer tokena. Klijenti šalju token u zaglavlju Authorization; aplikacija ga provjerava prema bilo kojem pozadinskom spremištu koje želi.

header

Naziv zaglavlja koje nosi token. Zadano 'Authorization' očekuje vrijednost Bearer <token>; prilagođeno zaglavlje nosi vrijednost tokena izravno.

scheme

Auth shema za zaglavlje Authorization. Zadano 'Bearer'.

error_status

HTTP status pri neuspjehu autentifikacije. Zadano 401.

authenticate(f)

Dekorator koji registrira provjeru tokena. f prima (request, token) i vraća korisnički objekt ili None

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 koji nadjačava zadani odgovor 401. f prima objekt zahtjeva i vraća odgovor (ili prekida).

__call__(f: Callable) Callable

Dekoriranje rute instancom TokenAuth štiti je. Zahtjevi bez valjanog tokena se odbijaju (zadano 401, ili što god errorhandler() vrati). Pri uspjehu autenticirani korisnik nalazi se u request.g.current_user

@app.get('/api/me')
@tokens
async def me(request):
    return {'user': request.g.current_user}

Vraća omotani rukovatelj.

optional(f: Callable) Callable

Poput __call__(), ali ne odbija zahtjeve kojima nedostaje token – rukovatelj se i dalje izvršava, s request.g.current_user postavljenim na autenticiranog korisnika ili na None. Korisno za rute koje mijenjaju svoj izlaz ovisno o tome je li pozivatelj autenticiran, a da to ne zahtijevaju:

@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()

Vraća omotani rukovatelj.

class BaseAuth

class microdot.auth.BaseAuth

Zajednička osnova za BasicAuth i TokenAuth. Prilagođene auth sheme mogu je naslijediti.

auth_callback: Callable | None

Povratni poziv registriran putem authenticate. None dok aplikacija ne registrira povratni poziv (dekoriranje funkcije s @auth.authenticate ga postavlja).

error_callback: Callable

Asinkroni pozivljivi objekt koji vraća odgovor poslan pri neuspjehu autentifikacije. Postavlja ga konstruktor na zadanu vrijednost koja vraća odgovor 401; zamijenite ga putem errorhandler na TokenAuth, ili izravno na prilagođenoj podklasi BaseAuth.

Dekorirane rute dobivaju request.g.current_user popunjen vrijednošću vraćenom iz povratnog poziva za autentifikaciju. Unutar rute, pregledajte taj atribut da biste identificirali pozivatelja.