microdot.auth — autenticazione HTTP¶
Decoratori che proteggono le route dietro l’autenticazione HTTP. Due varianti: BasicAuth per lo schema Authorization: Basic <base64> che i browser richiedono nativamente, e TokenAuth per lo schema Authorization: Bearer <token> utilizzato dalle API.
Entrambe le classi derivano da una base comune BaseAuth; un’applicazione costruisce l’oggetto di autenticazione, registra un callback di autenticazione con authenticate(), quindi decora le route protette con l’istanza di autenticazione.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
Autenticazione HTTP Basic. Il browser mostra una finestra di dialogo per nome utente / password quando una richiesta non autenticata raggiunge una route protetta e invia
Authorization: Basic <base64(user:pass)>nelle richieste successive.- realm
La stringa realm che il browser mostra accanto alla richiesta.
- charset
Charset annunciato nella sfida
WWW-Authenticate.- scheme
Nome dello schema di autenticazione. Predefinito
'Basic'.- error_status
Stato HTTP restituito in caso di autenticazione fallita. Predefinito 401.
- authenticate(f)¶
Decoratore che registra il controllo delle credenziali. f riceve
(request, username, password)e restituisce l’oggetto utente autenticato (oppureNonein caso di credenziali errate). L’oggetto restituito viene memorizzato inrequest.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)¶
Decorare una route con l’istanza
BasicAuthla protegge:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Come
__call__(), ma non rifiuta le richieste prive di credenziali – l’handler viene comunque eseguito, conrequest.g.current_userimpostato sull’utente autenticato oppure suNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Autenticazione tramite token Bearer. I client inviano un token nell’header
Authorization; l’applicazione lo convalida rispetto al backing store che preferisce.- header
Il nome dell’header che trasporta il token. Il valore predefinito
'Authorization'si aspetta il valoreBearer <token>; un header personalizzato trasporta direttamente il valore del token.- scheme
Schema di autenticazione per l’header
Authorization. Predefinito'Bearer'.- error_status
Stato HTTP in caso di autenticazione fallita. Predefinito 401.
- authenticate(f)¶
Decoratore che registra il controllo del token. f riceve
(request, token)e restituisce un oggetto utente oppureNoneimport 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)¶
Decoratore che sovrascrive la risposta 401 predefinita. f riceve l’oggetto request e restituisce una risposta (oppure interrompe).
- __call__(f: Callable) Callable¶
Decorare una route con l’istanza
TokenAuthla protegge. Le richieste prive di un token valido vengono rifiutate (401 per impostazione predefinita, oppure qualsiasi valore restituito daerrorhandler()). In caso di successo l’utente autenticato si trova inrequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Restituisce l’handler avvolto.
- optional(f: Callable) Callable¶
Come
__call__(), ma non rifiuta le richieste prive di token – l’handler viene comunque eseguito, conrequest.g.current_userimpostato sull’utente autenticato oppure suNone. Utile per le route che modificano il proprio output a seconda che il chiamante sia autenticato senza richiederlo:@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()
Restituisce l’handler avvolto.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Base comune per
BasicAutheTokenAuth. Schemi di autenticazione personalizzati possono ereditarne.- auth_callback: Callable | None¶
Il callback registrato tramite
authenticate.Nonefinché l’applicazione non registra il callback (decorare una funzione con@auth.authenticateè ciò che lo imposta).
- error_callback: Callable¶
Callable asincrono che restituisce la risposta inviata in caso di autenticazione fallita. Impostato dal costruttore su un valore predefinito che restituisce una risposta 401; sostituiscilo tramite
errorhandlersuTokenAuth, oppure direttamente su una sottoclasse personalizzata diBaseAuth.
Le route decorate ricevono request.g.current_user popolato con il valore restituito dal callback di autenticazione. All’interno della route, ispeziona quell’attributo per identificare il chiamante.