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.