microdot.auth — HTTP kimlik doğrulama

Rotaları HTTP kimlik doğrulamasının arkasına alan dekoratörler. İki türü vardır: tarayıcıların doğal olarak istem gösterdiği Authorization: Basic <base64> şeması için BasicAuth ve API’lerin kullandığı Authorization: Bearer <token> şeması için TokenAuth.

Her iki sınıf da ortak bir BaseAuth tabanından türer; bir uygulama auth nesnesini oluşturur, authenticate() ile bir kimlik doğrulama geri çağırması (callback) kaydeder, ardından korunan rotaları auth örneğiyle dekore eder.

class BasicAuth

class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)

HTTP Basic kimlik doğrulama. Kimliği doğrulanmamış bir istek korunan bir rotaya ulaştığında tarayıcı bir kullanıcı adı / parola iletişim kutusu açar ve sonraki isteklerde Authorization: Basic <base64(user:pass)> gönderir.

realm

Tarayıcının istem yanında gösterdiği realm dizesi.

charset

WWW-Authenticate zorlamasında bildirilen karakter kümesi.

scheme

Kimlik doğrulama şeması adı. Varsayılan 'Basic'.

error_status

Başarısız kimlik doğrulamada döndürülen HTTP durumu. Varsayılan 401.

authenticate(f)

Kimlik bilgisi kontrolünü kaydeden dekoratör. f, (request, username, password) alır ve kimliği doğrulanmış kullanıcı nesnesini (veya hatalı kimlik bilgilerinde None) döndürür. Döndürülen nesne request.g.current_user üzerinde saklanır.

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)

Bir rotayı BasicAuth örneğiyle dekore etmek onu korur:

@app.route('/admin')
@basic
def admin(request):
    return 'hello ' + request.g.current_user.name
optional(f)

Tıpkı __call__() gibi, ancak kimlik bilgisi içermeyen istekleri reddetmez – işleyici yine de çalışır ve request.g.current_user ya kimliği doğrulanmış kullanıcıya ya da None değerine ayarlanır.

class TokenAuth

class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)

Bearer-token kimlik doğrulama. İstemciler Authorization başlığında bir token gönderir; uygulama bunu istediği herhangi bir destekleyici depoya karşı doğrular.

header

Token’ı taşıyan başlık adı. Varsayılan 'Authorization', değerin Bearer <token> olmasını bekler; özel bir başlık ise token değerini doğrudan taşır.

scheme

Authorization başlığı için auth şeması. Varsayılan 'Bearer'.

error_status

Kimlik doğrulama başarısızlığında HTTP durumu. Varsayılan 401.

authenticate(f)

Token kontrolünü kaydeden dekoratör. f, (request, token) alır ve bir kullanıcı nesnesi veya None döndürür:

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)

Varsayılan 401 yanıtını geçersiz kılan dekoratör. f, request nesnesini alır ve bir yanıt döndürür (veya iptal eder).

__call__(f: Callable) Callable

Bir rotayı TokenAuth örneğiyle dekore etmek onu korur. Geçerli bir token içermeyen istekler reddedilir (varsayılan olarak 401 veya errorhandler() ne döndürürse). Başarı durumunda kimliği doğrulanmış kullanıcı request.g.current_user üzerinde yer alır:

@app.get('/api/me')
@tokens
async def me(request):
    return {'user': request.g.current_user}

Sarmalanan işleyiciyi döndürür.

optional(f: Callable) Callable

Tıpkı __call__() gibi, ancak token içermeyen istekleri reddetmez – işleyici yine de çalışır ve request.g.current_user ya kimliği doğrulanmış kullanıcıya ya da None değerine ayarlanır. Çağıranın kimliğinin doğrulanmış olup olmamasına göre çıktısını değiştiren, ancak bunu gerektirmeyen rotalar için kullanışlıdır:

@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()

Sarmalanan işleyiciyi döndürür.

class BaseAuth

class microdot.auth.BaseAuth

BasicAuth ve TokenAuth için ortak taban. Özel auth şemaları bunu alt sınıf olarak türetebilir.

auth_callback: Callable | None

authenticate aracılığıyla kaydedilen geri çağırma (callback). Uygulama geri çağırmayı kaydedene kadar None olur (bir fonksiyonu @auth.authenticate ile dekore etmek onu ayarlar).

error_callback: Callable

Kimlik doğrulama başarısızlığında gönderilen yanıtı döndüren asenkron çağrılabilir. Yapıcı tarafından 401 yanıtı döndüren bir varsayılana ayarlanır; bunu TokenAuth üzerindeki errorhandler aracılığıyla veya özel bir BaseAuth alt sınıfı üzerinde doğrudan değiştirin.

Dekore edilen rotalar, kimlik doğrulama geri çağırmasından döndürülen değerle doldurulmuş request.g.current_user alır. Rota içinde, çağıranı tanımlamak için bu özniteliği inceleyin.