microdot.auth --- Autentikasi HTTP

Dekorator yang melindungi rute dengan autentikasi HTTP. Dua jenis: BasicAuth untuk skema Authorization: Basic <base64> yang diminta browser secara bawaan, dan TokenAuth untuk skema Authorization: Bearer <token> yang digunakan oleh API.

Kedua kelas diturunkan dari basis BaseAuth yang sama; sebuah aplikasi membuat objek auth, mendaftarkan callback autentikasi dengan authenticate(), kemudian mendekorasi rute yang dilindungi dengan instans auth.

class BasicAuth

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

Autentikasi HTTP Basic. Browser menampilkan dialog nama pengguna / kata sandi saat permintaan yang tidak terautentikasi mencapai rute yang dilindungi dan mengirimkan Authorization: Basic <base64(user:pass)> pada permintaan berikutnya.

realm

String realm yang ditampilkan browser di samping prompt.

charset

Charset yang diiklankan dalam tantangan WWW-Authenticate.

scheme

Nama skema autentikasi. Default 'Basic'.

error_status

Status HTTP yang dikembalikan saat autentikasi gagal. Default 401.

authenticate(f)

Dekorator yang mendaftarkan pemeriksaan kredensial. f menerima (request, username, password) dan mengembalikan objek pengguna yang terautentikasi (atau None jika kredensial salah). Objek yang dikembalikan disimpan di request.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)

Mendekorasi rute dengan instans BasicAuth akan melindunginya:

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

Seperti __call__(), tetapi tidak menolak permintaan yang tidak memiliki kredensial -- handler tetap berjalan, dengan request.g.current_user diatur ke pengguna yang terautentikasi atau None.

class TokenAuth

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

Autentikasi token Bearer. Klien mengirimkan token dalam header Authorization; aplikasi memvalidasinya terhadap penyimpanan data apa pun yang diinginkan.

header

Nama header yang membawa token. Default 'Authorization' mengharapkan nilai Bearer <token>; header kustom membawa nilai token secara langsung.

scheme

Skema auth untuk header Authorization. Default 'Bearer'.

error_status

Status HTTP saat autentikasi gagal. Default 401.

authenticate(f)

Dekorator yang mendaftarkan pemeriksaan token. f menerima (request, token) dan mengembalikan objek pengguna atau None

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)

Dekorator yang mengganti respons 401 default. f menerima objek request dan mengembalikan respons (atau membatalkan).

__call__(f: Callable) Callable

Mendekorasi rute dengan instans TokenAuth akan melindunginya. Permintaan tanpa token yang valid ditolak (401 secara default, atau apa pun yang dikembalikan errorhandler()). Saat berhasil, pengguna yang terautentikasi ada di request.g.current_user

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

Mengembalikan handler yang dibungkus.

optional(f: Callable) Callable

Seperti __call__(), tetapi tidak menolak permintaan yang tidak memiliki token -- handler tetap berjalan, dengan request.g.current_user diatur ke pengguna yang terautentikasi atau None. Berguna untuk rute yang mengubah keluarannya berdasarkan apakah pemanggil terautentikasi tanpa membutuhkannya:

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

Mengembalikan handler yang dibungkus.

class BaseAuth

class microdot.auth.BaseAuth

Basis umum untuk BasicAuth dan TokenAuth. Skema auth kustom dapat menurunkannya.

auth_callback: Callable | None

Callback yang didaftarkan melalui authenticate. None sampai aplikasi mendaftarkan callback (mendekorasi fungsi dengan @auth.authenticate adalah yang menetapkannya).

error_callback: Callable

Callable async yang mengembalikan respons yang dikirim saat autentikasi gagal. Diatur oleh konstruktor ke default yang mengembalikan respons 401; ganti melalui errorhandler pada TokenAuth, atau langsung pada subkelas BaseAuth kustom.

Rute yang didekorasi mendapatkan request.g.current_user yang diisi dengan nilai yang dikembalikan dari callback autentikasi. Di dalam rute, periksa atribut tersebut untuk mengidentifikasi pemanggil.