microdot.auth --- Xác thực HTTP¶
Các decorator bảo vệ các route bằng xác thực HTTP. Có hai loại: BasicAuth dùng cơ chế Authorization: Basic <base64> mà trình duyệt hỗ trợ trực tiếp, và TokenAuth dùng cơ chế Authorization: Bearer <token> mà các API sử dụng.
Cả hai lớp đều kế thừa từ lớp cơ sở BaseAuth; ứng dụng tạo đối tượng auth, đăng ký hàm gọi lại xác thực với authenticate(), sau đó trang trí các route được bảo vệ bằng phiên bản auth.
class BasicAuth¶
- class microdot.auth.BasicAuth(realm: str = 'Please login', charset: str = 'UTF-8', scheme: str = 'Basic', error_status: int = 401)¶
Xác thực HTTP Basic. Trình duyệt hiển thị hộp thoại tên người dùng / mật khẩu khi một yêu cầu chưa được xác thực truy cập vào route được bảo vệ, và gửi
Authorization: Basic <base64(user:pass)>trong các yêu cầu tiếp theo.- realm
Chuỗi realm mà trình duyệt hiển thị bên cạnh dấu nhắc.
- charset
Bộ ký tự được quảng bá trong thách thức
WWW-Authenticate.- scheme
Tên cơ chế xác thực. Mặc định là
'Basic'.- error_status
Mã trạng thái HTTP trả về khi xác thực thất bại. Mặc định là 401.
- authenticate(f)¶
Decorator đăng ký hàm kiểm tra thông tin xác thực. f nhận
(request, username, password)và trả về đối tượng người dùng đã xác thực (hoặcNonenếu thông tin xác thực sai). Đối tượng được trả về được lưu trữ trongrequest.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)¶
Trang trí một route bằng phiên bản
BasicAuthđể bảo vệ nó:@app.route('/admin') @basic def admin(request): return 'hello ' + request.g.current_user.name
- optional(f)¶
Tương tự
__call__(), nhưng không từ chối các yêu cầu thiếu thông tin xác thực -- handler vẫn chạy, vớirequest.g.current_userđược đặt thành người dùng đã xác thực hoặcNone.
class TokenAuth¶
- class microdot.auth.TokenAuth(header: str = 'Authorization', scheme: str = 'Bearer', error_status: int = 401)¶
Xác thực Bearer token. Client gửi token trong header
Authorization; ứng dụng xác thực nó với bất kỳ kho lưu trữ nào nó muốn.- header
Tên header chứa token. Mặc định là
'Authorization'và yêu cầu giá trị có dạngBearer <token>; một header tùy chỉnh chứa giá trị token trực tiếp.- scheme
Cơ chế xác thực cho header
Authorization. Mặc định là'Bearer'.- error_status
Mã trạng thái HTTP khi xác thực thất bại. Mặc định là 401.
- authenticate(f)¶
Decorator đăng ký hàm kiểm tra token. f nhận
(request, token)và trả về đối tượng người dùng hoặcNoneimport 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)¶
Decorator ghi đè phản hồi 401 mặc định. f nhận đối tượng request và trả về một phản hồi (hoặc hủy).
- __call__(f: Callable) Callable¶
Trang trí một route bằng phiên bản
TokenAuthđể bảo vệ nó. Các yêu cầu không có token hợp lệ sẽ bị từ chối (401 theo mặc định, hoặc kết quả trả về từerrorhandler()). Khi thành công, người dùng đã xác thực được lưu trongrequest.g.current_user@app.get('/api/me') @tokens async def me(request): return {'user': request.g.current_user}
Trả về handler đã được bọc.
- optional(f: Callable) Callable¶
Tương tự
__call__(), nhưng không từ chối các yêu cầu thiếu token -- handler vẫn chạy, vớirequest.g.current_userđược đặt thành người dùng đã xác thực hoặcNone. Hữu ích cho các route thay đổi đầu ra dựa trên việc người gọi có được xác thực hay không mà không yêu cầu bắt buộc:@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()
Trả về handler đã được bọc.
class BaseAuth¶
- class microdot.auth.BaseAuth¶
Lớp cơ sở chung cho
BasicAuthvàTokenAuth. Các cơ chế xác thực tùy chỉnh có thể kế thừa từ nó.- auth_callback: Callable | None¶
Hàm gọi lại được đăng ký qua
authenticate. LàNonecho đến khi ứng dụng đăng ký hàm gọi lại (trang trí một hàm với@auth.authenticatelà cách thiết lập nó).
- error_callback: Callable¶
Callable bất đồng bộ trả về phản hồi được gửi khi xác thực thất bại. Được thiết lập bởi constructor với phản hồi 401 mặc định; thay thế nó qua
errorhandlertrênTokenAuth, hoặc trực tiếp trên lớp conBaseAuthtùy chỉnh.
Các route được trang trí sẽ có request.g.current_user được điền với giá trị trả về từ hàm gọi lại xác thực. Bên trong route, hãy kiểm tra thuộc tính đó để xác định người gọi.