microdot.auth — uwierzytelnianie HTTP

Dekoratory, które chronią trasy za uwierzytelnianiem HTTP. Dwie odmiany: BasicAuth dla schematu Authorization: Basic <base64>, o który przeglądarki pytają natywnie, oraz TokenAuth dla schematu Authorization: Bearer <token>, którego używają interfejsy API.

Obie klasy wywodzą się ze wspólnej bazy BaseAuth; aplikacja tworzy obiekt uwierzytelniania, rejestruje wywołanie zwrotne uwierzytelniania za pomocą authenticate(), a następnie dekoruje chronione trasy instancją uwierzytelniania.

class BasicAuth

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

Uwierzytelnianie HTTP Basic. Przeglądarka wyświetla okno dialogowe z nazwą użytkownika / hasłem, gdy nieuwierzytelnione żądanie trafi na chronioną trasę, i wysyła Authorization: Basic <base64(user:pass)> w kolejnych żądaniach.

realm

Ciąg realm, który przeglądarka wyświetla obok monitu.

charset

Zestaw znaków ogłaszany w wyzwaniu WWW-Authenticate.

scheme

Nazwa schematu uwierzytelniania. Domyślnie 'Basic'.

error_status

Status HTTP zwracany w przypadku niepowodzenia uwierzytelniania. Domyślnie 401.

authenticate(f)

Dekorator rejestrujący sprawdzanie poświadczeń. f przyjmuje (request, username, password) i zwraca uwierzytelniony obiekt użytkownika (lub None w przypadku błędnych poświadczeń). Zwrócony obiekt jest przechowywany w 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)

Udekorowanie trasy instancją BasicAuth chroni ją:

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

Podobnie jak __call__(), ale nie odrzuca żądań, którym brakuje poświadczeń – procedura obsługi nadal się uruchamia, z request.g.current_user ustawionym na uwierzytelnionego użytkownika albo None.

class TokenAuth

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

Uwierzytelnianie za pomocą tokenu Bearer. Klienci wysyłają token w nagłówku Authorization; aplikacja weryfikuje go względem dowolnego magazynu danych.

header

Nazwa nagłówka przenoszącego token. Domyślny 'Authorization' oczekuje wartości Bearer <token>; niestandardowy nagłówek przenosi wartość tokenu bezpośrednio.

scheme

Schemat uwierzytelniania dla nagłówka Authorization. Domyślnie 'Bearer'.

error_status

Status HTTP w przypadku niepowodzenia uwierzytelniania. Domyślnie 401.

authenticate(f)

Dekorator rejestrujący sprawdzanie tokenu. f przyjmuje (request, token) i zwraca obiekt użytkownika lub 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 nadpisujący domyślną odpowiedź 401. f przyjmuje obiekt żądania i zwraca odpowiedź (lub przerywa).

__call__(f: Callable) Callable

Udekorowanie trasy instancją TokenAuth chroni ją. Żądania bez prawidłowego tokenu są odrzucane (domyślnie 401 lub cokolwiek zwróciło errorhandler()). W przypadku powodzenia uwierzytelniony użytkownik znajduje się w request.g.current_user

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

Zwraca opakowaną procedurę obsługi.

optional(f: Callable) Callable

Podobnie jak __call__(), ale nie odrzuca żądań, którym brakuje tokenu – procedura obsługi nadal się uruchamia, z request.g.current_user ustawionym na uwierzytelnionego użytkownika albo None. Przydatne dla tras, które zmieniają swoje wyjście w zależności od tego, czy wywołujący jest uwierzytelniony, bez wymagania tego:

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

Zwraca opakowaną procedurę obsługi.

class BaseAuth

class microdot.auth.BaseAuth

Wspólna baza dla BasicAuth i TokenAuth. Niestandardowe schematy uwierzytelniania mogą po niej dziedziczyć.

auth_callback: Callable | None

Wywołanie zwrotne zarejestrowane za pomocą authenticate. None dopóki aplikacja nie zarejestruje wywołania zwrotnego (ustawia je udekorowanie funkcji za pomocą @auth.authenticate).

error_callback: Callable

Asynchroniczny obiekt wywoływalny zwracający odpowiedź wysyłaną w przypadku niepowodzenia uwierzytelniania. Ustawiany przez konstruktor na wartość domyślną zwracającą odpowiedź 401; zastąp go za pomocą errorhandler w TokenAuth lub bezpośrednio w niestandardowej podklasie BaseAuth.

Udekorowane trasy otrzymują request.g.current_user wypełnione wartością zwróconą z wywołania zwrotnego uwierzytelniania. Wewnątrz trasy sprawdź ten atrybut, aby zidentyfikować wywołującego.