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.