microdot.auth — autenticação HTTP¶
Decoradores que protegem rotas com 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> utilizado pelas APIs.
Ambas as classes derivam de uma base comum BaseAuth; uma aplicação constrói o objeto de autenticação, regista uma callback de autenticação com authenticate() e depois 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 apresenta uma caixa de diálogo de nome de utilizador/palavra-passe quando um pedido não autenticado atinge uma rota protegida, e envia
Authorization: Basic <base64(user:pass)>nos pedidos seguintes.- realm
A cadeia de carateres realm que o navegador mostra junto ao pedido de autenticação.
- charset
Conjunto de carateres anunciado no desafio
WWW-Authenticate.- scheme
Nome do esquema de autenticação. Predefinição:
'Basic'.- error_status
Estado HTTP devolvido em caso de falha de autenticação. Predefinição: 401.
- authenticate(f)¶
Decorador que regista a verificação de credenciais. f recebe
(request, username, password)e devolve o objeto de utilizador autenticado (ouNonese as credenciais forem inválidas). O objeto devolvido é 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
BasicAuthprotege-a:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Semelhante a
__call__(), mas não rejeita pedidos sem credenciais — o handler executa na mesma, comrequest.g.current_userdefinido como o utilizador 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 valida-o contra o repositório que preferir.- header
O nome do cabeçalho que transporta o token. O valor predefinido
'Authorization'espera o valorBearer <token>; um cabeçalho personalizado transporta o valor do token diretamente.- scheme
Esquema de autenticação para o cabeçalho
Authorization. Predefinição:'Bearer'.- error_status
Estado HTTP em caso de falha de autenticação. Predefinição: 401.
- authenticate(f)¶
Decorador que regista a verificação do token. f recebe
(request, token)e devolve um objeto de utilizador 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 substitui a resposta 401 predefinida. f recebe o objeto de pedido e devolve uma resposta (ou interrompe a execução).
- __call__(f: Callable) Callable¶
Decorar uma rota com a instância
TokenAuthprotege-a. Pedidos sem token válido são rejeitados (401 por predefinição, ou o queerrorhandler()devolver). Em caso de sucesso, o utilizador autenticado encontra-se emrequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Devolve o handler envolvido.
- optional(f: Callable) Callable¶
Semelhante a
__call__(), mas não rejeita pedidos sem token — o handler executa na mesma, comrequest.g.current_userdefinido como o utilizador autenticado ouNone. Útil para rotas que alteram o seu resultado consoante o chamador esteja ou não autenticado, sem o exigir:@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()
Devolve o handler envolvido.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Base comum para
BasicAutheTokenAuth. Esquemas de autenticação personalizados podem criar subclasses a partir desta.- auth_callback: Callable | None¶
A callback registada via
authenticate.Noneaté a aplicação registar a callback (decorar uma função com@auth.authenticateé o que a define).
- error_callback: Callable¶
Callable assíncrono que devolve a resposta enviada em caso de falha de autenticação. Definido pelo construtor com um valor predefinido que devolve uma resposta 401; pode ser substituído via
errorhandleremTokenAuth, ou diretamente numa subclasse personalizada deBaseAuth.
As rotas decoradas recebem request.g.current_user preenchido com o valor devolvido pela callback de autenticação. Dentro da rota, inspecione esse atributo para identificar o chamador.