microdot.auth — HTTP-autentisering¶
Dekoratorer som spärrar rutter bakom HTTP-autentisering. Två varianter: BasicAuth för schemat Authorization: Basic <base64> som webbläsare frågar efter direkt, och TokenAuth för schemat Authorization: Bearer <token> som API:er använder.
Båda klasserna härleds från en gemensam basklass BaseAuth; en applikation konstruerar autentiseringsobjektet, registrerar ett autentiseringsåteranrop med authenticate() och dekorerar sedan skyddade rutter med autentiseringsinstansen.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
HTTP Basic-autentisering. Webbläsaren visar en dialog för användarnamn/lösenord när en oautentiserad begäran träffar en skyddad rutt och skickar
Authorization: Basic <base64(user:pass)>vid efterföljande begäranden.- realm
Realm-strängen som webbläsaren visar bredvid frågan.
- charset
Teckenuppsättning som annonseras i
WWW-Authenticate-utmaningen.- scheme
Namn på autentiseringsschemat. Standard
'Basic'.- error_status
HTTP-status som returneras vid misslyckad autentisering. Standard 401.
- authenticate(f)¶
Dekorator som registrerar kontrollen av inloggningsuppgifter. f tar
(request, username, password)och returnerar det autentiserade användarobjektet (ellerNonevid felaktiga inloggningsuppgifter). Det returnerade objektet lagras irequest.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)¶
Att dekorera en rutt med
BasicAuth-instansen skyddar den:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Som
__call__(), men avvisar inte begäranden som saknar inloggningsuppgifter – hanteraren körs ändå, medrequest.g.current_usersatt till antingen den autentiserade användaren ellerNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Bearer-token-autentisering. Klienter skickar en token i
Authorization-huvudet; applikationen validerar den mot vilken lagring den än föredrar.- header
Namnet på huvudet som bär token. Standardvärdet
'Authorization'förväntar sig värdetBearer <token>; ett anpassat huvud bär token-värdet direkt.- scheme
Autentiseringsschema för
Authorization-huvudet. Standard'Bearer'.- error_status
HTTP-status vid autentiseringsfel. Standard 401.
- authenticate(f)¶
Dekorator som registrerar token-kontrollen. f tar
(request, token)och returnerar ett användarobjekt ellerNoneimport 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 som åsidosätter standardsvaret 401. f tar request-objektet och returnerar ett svar (eller avbryter).
- __call__(f: Callable) Callable¶
Att dekorera en rutt med
TokenAuth-instansen skyddar den. Begäranden utan en giltig token avvisas (401 som standard, eller vaderrorhandler()returnerade). Vid lyckad autentisering finns den autentiserade användaren irequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Returnerar den omslutna hanteraren.
- optional(f: Callable) Callable¶
Som
__call__(), men avvisar inte begäranden som saknar en token – hanteraren körs ändå, medrequest.g.current_usersatt till antingen den autentiserade användaren ellerNone. Användbart för rutter som ändrar sin utdata beroende på om anroparen är autentiserad utan att kräva det:@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()
Returnerar den omslutna hanteraren.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Gemensam bas för
BasicAuthochTokenAuth. Anpassade autentiseringsscheman kan subklassa den.- auth_callback: Callable | None¶
Återanropet som registrerats via
authenticate.Nonetills applikationen registrerar återanropet (att dekorera en funktion med@auth.authenticateär det som sätter det).
- error_callback: Callable¶
Asynkront anropsbart objekt som returnerar svaret som skickas vid autentiseringsfel. Sätts av konstruktorn till ett standardvärde som returnerar ett 401-svar; ersätt det via
errorhandlerpåTokenAuth, eller direkt på en anpassadBaseAuth-subklass.
De dekorerade rutterna får request.g.current_user ifyllt med värdet som returnerats från autentiseringsåteranropet. Inuti rutten inspekterar du det attributet för att identifiera anroparen.