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 (lubNonew przypadku błędnych poświadczeń). Zwrócony obiekt jest przechowywany wrequest.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ą
BasicAuthchroni 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, zrequest.g.current_userustawionym na uwierzytelnionego użytkownika alboNone.
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ściBearer <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 lubNoneimport 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ą
TokenAuthchroni ją. Żądania bez prawidłowego tokenu są odrzucane (domyślnie 401 lub cokolwiek zwróciłoerrorhandler()). W przypadku powodzenia uwierzytelniony użytkownik znajduje się wrequest.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, zrequest.g.current_userustawionym na uwierzytelnionego użytkownika alboNone. 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
BasicAuthiTokenAuth. Niestandardowe schematy uwierzytelniania mogą po niej dziedziczyć.- auth_callback: Callable | None¶
Wywołanie zwrotne zarejestrowane za pomocą
authenticate.Nonedopó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ą
errorhandlerwTokenAuthlub bezpośrednio w niestandardowej podklasieBaseAuth.
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.