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)и возвращает объект пользователя или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)¶
Декоратор, переопределяющий стандартный ответ 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, заполненный значением, возвращённым функцией обратного вызова аутентификации. Внутри маршрута проверьте этот атрибут, чтобы идентифицировать вызывающего.