Giao diện
@digiforce-nc/plugin-auth
Plugin xác thực (authentication) — quản lý phương thức đăng nhập, phiên làm việc (session/token), và vòng đời tài khoản.
Plugin này làm gì?
Hãy hình dung hệ thống như một tòa nhà có nhiều cửa vào. plugin-auth là hệ thống quản lý cửa — nó không quan tâm bạn dùng thẻ từ, vân tay, hay mật khẩu, nó chỉ đảm bảo: ai vào được, vào bằng cách nào, và phiên làm việc kéo dài bao lâu.
Ba nhiệm vụ chính
| # | Nhiệm vụ | Chi tiết |
|---|---|---|
| 1 | Authenticator registry | Đăng ký, quản lý nhiều phương thức xác thực (email/password, OIDC, LDAP, SMS...) |
| 2 | Xác minh danh tính | signIn, signUp, signOut, lostPassword, resetPassword, changePassword |
| 3 | Token policy | Quản lý JWT, thời hạn token, blacklist token, refresh tự động |
Kiến trúc
Tổng quan các tầng
| Thành phần | Vai trò |
|---|---|
| AuthManager | Registry trung tâm quản lý tất cả authenticator type (từ core @digiforce-nc/auth) |
| BasicAuth | Authenticator mặc định: email/password, hỗ trợ signup form, lost/reset password |
| Storer | Lưu + cache danh sách authenticator từ DB, tự động invalidate khi authenticator thay đổi |
| TokenController | Quản lý JWT lifecycle: cấp phát, hết hạn, gia hạn |
| TokenBlacklistService | Revoke token đã cấp (DB + Redis Bloom filter) |
Luồng đăng nhập
Luồng quên mật khẩu
API endpoints
Xác thực
| Endpoint | Method | Mô tả |
|---|---|---|
/auth:signIn | POST | Đăng nhập, trả về token |
/auth:signUp | POST | Đăng ký tài khoản mới |
/auth:signOut | POST | Đăng xuất, revoke token |
/auth:check | GET | Kiểm tra phiên hiện tại |
/auth:changePassword | POST | Đổi mật khẩu (cần đăng nhập) |
/auth:lostPassword | POST | Yêu cầu reset password (gửi email) |
/auth:resetPassword | POST | Reset password bằng token |
Authenticator management
| Endpoint | Method | Mô tả |
|---|---|---|
authenticators:list | GET | Danh sách authenticator (admin) |
authenticators:publicList | GET | Danh sách authenticator cho trang login (public) |
authenticators:listTypes | GET | Các loại authenticator đã đăng ký |
authenticators:create | POST | Tạo authenticator mới |
authenticators:update | POST | Cập nhật cấu hình |
authenticators:destroy | POST | Xóa (phải còn ít nhất 1 authenticator enabled) |
Database
| Bảng | Chứa gì |
|---|---|
authenticators | Phương thức xác thực (name, type, enabled, options) |
usersAuthenticators | Liên kết user ↔ authenticator (M2M), lưu UUID/meta cho SSO |
tokenControlConfig | Cấu hình token policy (thời hạn, renew limit) |
issuedTokens | Token đã cấp (jti, userId, timestamps) |
tokenBlacklist | Token bị revoke |
Token policy
Plugin quản lý JWT token với các tham số cấu hình:
| Tham số | Mặc định | Mô tả |
|---|---|---|
| Token expiration | 1 ngày | Thời hạn access token |
| Refresh token expiration | 7 ngày | Thời hạn refresh token |
| Renew limit | 1 ngày | Giới hạn gia hạn token |
Client tự động gia hạn token khi nhận header x-new-token từ response. Khi token hết hạn hoặc bị revoke, client redirect về trang đăng nhập.
Mở rộng authenticator
Plugin khác có thể đăng ký loại authenticator mới:
typescript
class MyOIDCAuth extends BaseAuth {
async validate() {
// Logic xác thực OIDC
}
}
// Trong plugin.load()
this.app.authManager.registerTypes('oidc', {
auth: MyOIDCAuth,
title: 'OIDC Login',
});Các plugin auth provider có sẵn: plugin-auth-oidc, plugin-auth-ldap, plugin-auth-saml, plugin-auth-sms, plugin-auth-cas, plugin-auth-apple, plugin-auth-telegram.
Thành phần client
| Thành phần | Mô tả |
|---|---|
AuthProvider | Provider quản lý trạng thái xác thực, inject vào app |
AuthLayout | Layout cho các trang /signin, /signup, /forgot-password |
| Trang SignIn/SignUp | Form đăng nhập/đăng ký, hiển thị theo authenticator |
| Authenticator Settings | UI quản lý authenticator (Settings → Authentication) |
| Token Policy Settings | UI cấu hình token policy (Settings → Security → Token policy) |
| Axios interceptor | Tự động refresh token, redirect 401 về sign-in |
Dependencies
| Package | Vai trò |
|---|---|
@digiforce-nc/auth | AuthManager, BaseAuth (core) |
@digiforce-nc/server | Server framework |
@digiforce-nc/database | Database ORM |
@digiforce-nc/client | Client framework |
@digiforce-nc/actions | Action context |