microdot.auth — autenticação HTTP¶
Decoradores que protegem rotas por trás da autenticação HTTP. Dois tipos: BasicAuth para o esquema Authorization: Basic <base64> que os navegadores solicitam nativamente, e TokenAuth para o esquema Authorization: Bearer <token> que as APIs usam.
Ambas as classes derivam de uma base comum BaseAuth; uma aplicação constrói o objeto de autenticação, registra um callback de autenticação com authenticate() e, em seguida, decora as rotas protegidas com a instância de autenticação.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
Autenticação HTTP Basic. O navegador exibe uma caixa de diálogo de nome de usuário / senha quando uma requisição não autenticada atinge uma rota protegida e envia
Authorization: Basic <base64(user:pass)>nas requisições subsequentes.- realm
A string de realm que o navegador exibe ao lado do prompt.
- charset
Charset anunciado no desafio
WWW-Authenticate.- scheme
Nome do esquema de autenticação. Padrão
'Basic'.- error_status
Status HTTP retornado em caso de falha na autenticação. Padrão 401.
- authenticate(f)¶
Decorador que registra a verificação de credenciais. f recebe
(request, username, password)e retorna o objeto de usuário autenticado (ouNoneem caso de credenciais inválidas). O objeto retornado é armazenado emrequest.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)¶
Decorar uma rota com a instância de
BasicAutha protege:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Como
__call__(), mas não rejeita requisições que não tenham credenciais – o manipulador ainda é executado, comrequest.g.current_userdefinido como o usuário autenticado ouNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Autenticação por token Bearer. Os clientes enviam um token no cabeçalho
Authorization; a aplicação o valida contra qualquer armazenamento de apoio que preferir.- header
O nome do cabeçalho que carrega o token. O padrão
'Authorization'espera o valorBearer <token>; um cabeçalho personalizado carrega o valor do token diretamente.- scheme
Esquema de autenticação para o cabeçalho
Authorization. Padrão'Bearer'.- error_status
Status HTTP em caso de falha na autenticação. Padrão 401.
- authenticate(f)¶
Decorador que registra a verificação de token. f recebe
(request, token)e retorna um objeto de usuário ouNoneimport 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)¶
Decorador que sobrescreve a resposta 401 padrão. f recebe o objeto de requisição e retorna uma resposta (ou aborta).
- __call__(f: Callable) Callable¶
Decorar uma rota com a instância de
TokenAutha protege. Requisições sem um token válido são rejeitadas (401 por padrão, ou o que quer queerrorhandler()tenha retornado). Em caso de sucesso, o usuário autenticado fica emrequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Retorna o manipulador encapsulado.
- optional(f: Callable) Callable¶
Como
__call__(), mas não rejeita requisições que não tenham um token – o manipulador ainda é executado, comrequest.g.current_userdefinido como o usuário autenticado ouNone. Útil para rotas que alteram sua saída com base em se o chamador está autenticado, sem exigir isso:@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()
Retorna o manipulador encapsulado.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Base comum para
BasicAutheTokenAuth. Esquemas de autenticação personalizados podem criar subclasses dela.- auth_callback: Callable | None¶
O callback registrado via
authenticate.Noneaté que a aplicação registre o callback (decorar uma função com@auth.authenticateé o que o define).
- error_callback: Callable¶
Chamável assíncrono que retorna a resposta enviada em caso de falha na autenticação. Definido pelo construtor como um padrão que retorna uma resposta 401; substitua-o via
errorhandleremTokenAuth, ou diretamente em uma subclasse personalizada deBaseAuth.
As rotas decoradas têm request.g.current_user preenchido com o valor retornado pelo callback de autenticação. Dentro da rota, inspecione esse atributo para identificar o chamador.