Security API
JWTBackend
JWT authentication backend.
Constructor
JWTBackend(secret_key: str, algorithm: str = "HS256")
Methods
async authenticate(request: Request) -> User | None— Authenticate a requestasync create_token(user: User, expires_in: int | None = None) -> str— Create a JWT tokenasync validate_token(token: str) -> User | None— Validate a JWT tokenasync revoke_token(token: str) -> None— Revoke a token
SessionBackend
Session authentication backend.
Constructor
SessionBackend(session_store: dict[str, dict[str, Any]] | None = None)
Methods
async authenticate(request: Request) -> User | Noneasync create_token(user: User, expires_in: int | None = None) -> strasync validate_token(token: str) -> User | Noneasync revoke_token(token: str) -> None
User
User object.
Constructor
User(id: str | int, username: str | None = None, email: str | None = None, roles: list[str] | None = None, permissions: list[str] | None = None, metadata: dict[str, Any] | None = None)
Methods
has_role(role: str) -> bool— Check if user has a rolehas_permission(permission: str) -> bool— Check if user has a permissionto_dict() -> dict[str, Any]— Convert to dictionary
Decorators
login_required
login_required(func: Callable) -> Callable
Require authentication.
permission_required
permission_required(permission: str) -> Callable
Require a permission.
role_required
role_required(role: str) -> Callable
Require a role.
authorize
authorize(permission: str | None = None, role: str | None = None) -> Callable
Require both permission and role.
CSRF
CSRF protection.
Constructor
CSRF(secret_key: str, cookie_name: str = "_csrf", header_name: str = "x-csrf-token")
Methods
generate_token() -> str— Generate a CSRF tokenverify_token(token: str) -> bool— Verify a CSRF tokenget_token_from_request(request: Request) -> str | Nonevalidate_request(request: Request) -> None
RateLimiter
Rate limiter.
Constructor
RateLimiter(requests: int = 60, window_seconds: int = 60, key_func: Callable[[dict[str, Any]], str] | None = None)
Methods
async check(scope) -> bool— Check if rate limit is exceededget_remaining(scope) -> int— Get remaining requestsget_retry_after(scope) -> int— Get retry-after seconds
Password Hashing
hash_password(password: str) -> str— Hash a passwordverify_password(password: str, hashed: str) -> bool— Verify a passwordneeds_rehash(hashed: str) -> bool— Check if rehash is needed
Security Reminder
Always store SECRET_KEY in environment variables, never in code.