microdot.auth — HTTP-автентифікація¶
Декоратори, що захищають маршрути за допомогою HTTP-автентифікації. Два варіанти: BasicAuth для схеми Authorization: Basic <base64>, яку браузери запитують нативно, та TokenAuth для схеми Authorization: Bearer <token>, що використовується у API.
Обидва класи успадковуються від спільного базового класу BaseAuth; застосунок створює об’єкт автентифікації, реєструє зворотний виклик автентифікації через authenticate(), а потім декорує захищені маршрути цим екземпляром.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
HTTP Basic автентифікація. Браузер відображає діалог введення імені користувача і пароля, коли неавтентифікований запит потрапляє на захищений маршрут, і надсилає
Authorization: Basic <base64(user:pass)>у подальших запитах.- realm
Рядок realm, який браузер відображає поруч із підказкою.
- charset
Кодування, оголошене у виклику
WWW-Authenticate.- scheme
Назва схеми автентифікації. За замовчуванням
'Basic'.- error_status
HTTP-статус, що повертається при невдалій автентифікації. За замовчуванням 401.
- authenticate(f)¶
Декоратор, що реєструє перевірку облікових даних. f приймає
(request, username, password)і повертає автентифікований об’єкт користувача (абоNoneпри невірних даних). Повернутий об’єкт зберігається у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)¶
Декорування маршруту екземпляром
BasicAuthзахищає його:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Подібно до
__call__(), але не відхиляє запити без облікових даних — обробник все одно виконується, аrequest.g.current_userвстановлюється або як автентифікований користувач, або якNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Автентифікація за Bearer-токеном. Клієнти надсилають токен у заголовку
Authorization; застосунок перевіряє його у будь-якому сховищі за своїм вибором.- header
Назва заголовка, що містить токен. За замовчуванням
'Authorization'очікує значенняBearer <token>; власний заголовок несе значення токена безпосередньо.- scheme
Схема автентифікації для заголовка
Authorization. За замовчуванням'Bearer'.- error_status
HTTP-статус при помилці автентифікації. За замовчуванням 401.
- authenticate(f)¶
Декоратор, що реєструє перевірку токена. f приймає
(request, token)і повертає об’єкт користувача абоNoneimport 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)¶
Декоратор, що перевизначає типову відповідь 401. f приймає об’єкт запиту і повертає відповідь (або перериває виконання).
- __call__(f: Callable) Callable¶
Декорування маршруту екземпляром
TokenAuthзахищає його. Запити без дійсного токена відхиляються (401 за замовчуванням, або те, що повертаєerrorhandler()). При успіху автентифікований користувач зберігається уrequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Повертає обгорнутий обробник.
- optional(f: Callable) Callable¶
Подібно до
__call__(), але не відхиляє запити без токена — обробник все одно виконується, аrequest.g.current_userвстановлюється або як автентифікований користувач, або якNone. Корисно для маршрутів, що змінюють вивід залежно від того, чи автентифіковано абонента, без обов’язкової автентифікації:@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()
Повертає обгорнутий обробник.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Спільний базовий клас для
BasicAuthтаTokenAuth. Власні схеми автентифікації можуть успадковуватися від нього.- auth_callback: Callable | None¶
Зворотний виклик, зареєстрований через
authenticate.Noneдо реєстрації зворотного виклику застосунком (декорування функції через@auth.authenticateі є таким встановленням).
- error_callback: Callable¶
Асинхронний виклик, що повертає відповідь при невдалій автентифікації. Встановлюється конструктором за замовчуванням як відповідь 401; замінюється через
errorhandlerуTokenAuthабо безпосередньо у власному підкласіBaseAuth.
Декоровані маршрути отримують request.g.current_user, заповнений значенням, поверненим зворотним викликом автентифікації. Всередині маршруту цей атрибут слугує для ідентифікації абонента.