microdot.auth — HTTP-todennus

Dekoraattorit, jotka suojaavat reittejä HTTP-todennuksen taakse. Kahta tyyppiä: BasicAuth skeemalle Authorization: Basic <base64>, jota selaimet pyytävät natiivisti, ja TokenAuth skeemalle Authorization: Bearer <token>, jota API:t käyttävät.

Molemmat luokat periytyvät yhteisestä BaseAuth-kantaluokasta; sovellus rakentaa todennusobjektin, rekisteröi todennuksen takaisinkutsun metodilla authenticate() ja dekoroi sitten suojatut reitit todennusinstanssilla.

class BasicAuth

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

HTTP Basic -todennus. Selain avaa käyttäjänimi/salasana-valintaikkunan, kun todentamaton pyyntö osuu suojattuun reittiin, ja lähettää Authorization: Basic <base64(user:pass)> seuraavissa pyynnöissä.

realm

Realm-merkkijono, jonka selain näyttää kehotteen vieressä.

charset

Merkistö, joka ilmoitetaan WWW-Authenticate-haasteessa.

scheme

Todennusskeeman nimi. Oletus 'Basic'.

error_status

Epäonnistuneessa todennuksessa palautettava HTTP-tila. Oletus 401.

authenticate(f)

Dekoraattori, joka rekisteröi tunnistetietojen tarkistuksen. f ottaa parametrit (request, username, password) ja palauttaa todennetun käyttäjäobjektin (tai None virheellisillä tunnistetiedoilla). Palautettu objekti tallennetaan kohteeseen 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)

Reitin dekorointi BasicAuth-instanssilla suojaa sen:

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

Kuten __call__(), mutta ei hylkää pyyntöjä, joista puuttuvat tunnistetiedot – käsittelijä suoritetaan silti, ja request.g.current_user on asetettu joko todennetuksi käyttäjäksi tai arvoon None.

class TokenAuth

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

Bearer-token-todennus. Asiakkaat lähettävät tokenin Authorization-otsakkeessa; sovellus validoi sen haluamaansa taustasäilöä vasten.

header

Otsakkeen nimi, joka kuljettaa tokenin. Oletus 'Authorization' odottaa arvoa Bearer <token>; mukautettu otsake kuljettaa token-arvon suoraan.

scheme

Authorization-otsakkeen todennusskeema. Oletus 'Bearer'.

error_status

Todennuksen epäonnistuessa palautettava HTTP-tila. Oletus 401.

authenticate(f)

Dekoraattori, joka rekisteröi token-tarkistuksen. f ottaa parametrit (request, token) ja palauttaa käyttäjäobjektin tai 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)

Dekoraattori, joka ohittaa oletusarvoisen 401-vastauksen. f ottaa pyyntöobjektin ja palauttaa vastauksen (tai keskeyttää).

__call__(f: Callable) Callable

Reitin dekorointi TokenAuth-instanssilla suojaa sen. Pyynnöt ilman kelvollista tokenia hylätään (oletuksena 401 tai mitä tahansa errorhandler() palautti). Onnistuessa todennettu käyttäjä on kohteessa request.g.current_user

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

Palauttaa käärityn käsittelijän.

optional(f: Callable) Callable

Kuten __call__(), mutta ei hylkää pyyntöjä, joista puuttuu token – käsittelijä suoritetaan silti, ja request.g.current_user on asetettu joko todennetuksi käyttäjäksi tai arvoon None. Hyödyllinen reiteille, jotka muuttavat tulostettaan sen mukaan, onko kutsuja todennettu, ilman että sitä vaaditaan:

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

Palauttaa käärityn käsittelijän.

class BaseAuth

class microdot.auth.BaseAuth

Yhteinen kantaluokka luokille BasicAuth ja TokenAuth. Mukautetut todennusskeemat voivat periytyä siitä.

auth_callback: Callable | None

Metodilla authenticate rekisteröity takaisinkutsu. None siihen asti, kunnes sovellus rekisteröi takaisinkutsun (funktion dekorointi merkinnällä @auth.authenticate asettaa sen).

error_callback: Callable

Asynkroninen kutsuttava, joka palauttaa todennuksen epäonnistuessa lähetettävän vastauksen. Konstruktori asettaa sen oletukseksi, joka palauttaa 401-vastauksen; korvaa se metodilla errorhandler luokassa TokenAuth tai suoraan mukautetussa BaseAuth-aliluokassa.

Dekoroiduille reiteille request.g.current_user täytetään todennuksen takaisinkutsun palauttamalla arvolla. Tutki tätä attribuuttia reitin sisällä kutsujan tunnistamiseksi.