Giao diện
Câu hỏi thường gặp (FAQ) — Two-Factor Authentication
Thiết lập
User mất điện thoại, không thể đăng nhập?
Giải pháp theo thứ tự ưu tiên:
- Dùng verifier khác: Nếu user đã liên kết cả SMS và Email, có thể dùng phương thức còn lại
- Admin reset 2FA: Admin vào quản lý user, xóa liên kết verifier của user đó. User sẽ được yêu cầu liên kết lại khi đăng nhập
- Tắt tạm enforce: Nếu cần khẩn cấp, admin tắt
enforcetrong 2FA settings để user đăng nhập mà không cần 2FA
Có thể bật 2FA chỉ cho admin không?
Hiện tại plugin chỉ hỗ trợ enforce cho tất cả user hoặc không ai. Không có cấu hình theo role. Nếu cần phân biệt:
- Bật
enforce: false→ để user tự chọn bật 2FA - Hoặc phát triển middleware tùy chỉnh kiểm tra role trước khi enforce
App authenticator (TOTP) nào được hỗ trợ?
Plugin hiện tại sử dụng hệ thống verification với loại sms-otp và email-otp. TOTP app (Google Authenticator) cần verification type riêng trong plugin-verification. Các app TOTP phổ biến:
- Google Authenticator
- Authy
- Microsoft Authenticator
- 1Password
- Bitwarden
Plugin-verification có bắt buộc không?
Có, bắt buộc. Plugin 2FA import trực tiếp PluginVerificationServer và gọi:
verificationManager.addSceneRule()— đăng ký quy tắc sceneverificationManager.registerScene()— đăng ký scene'2fa'verificationManager.getVerifiers()— lấy danh sách verifiersverificationManager.getBoundRecord()— kiểm tra user đã liên kết chưa
Nếu plugin-verification chưa bật, plugin 2FA sẽ lỗi khi load.
Sử dụng
Mã 2FA nhập đúng nhưng vẫn báo sai?
Kiểm tra:
- Hết hạn: Mã OTP có thời gian hiệu lực — nhập ngay khi nhận
- Đã dùng: Mỗi mã chỉ dùng được 1 lần — yêu cầu gửi mã mới
- Sai verifier: Đảm bảo nhập mã cho đúng verifier đã chọn (SMS vs Email)
- Token hết hạn: 2FA token tạm thời có thể hết hạn — quay lại bước đăng nhập
Làm sao tắt 2FA?
Hai trường hợp:
- User tự tắt: Nếu
enforce: false, user có thể xóa liên kết verifier trong profile - Admin tắt: Tắt
enforcetrong 2FA settings hoặc xóa tất cả verifiers khỏi danh sách
Đã liên kết verifier rồi nhưng muốn đổi số điện thoại?
- Xóa liên kết verifier hiện tại
- Liên kết lại với số điện thoại mới
- Hệ thống sẽ gửi mã xác minh đến số mới để xác nhận
Cảnh báo
Nếu enforce: true và user xóa verifier duy nhất, user sẽ bị yêu cầu liên kết lại ở lần đăng nhập tiếp theo.
Bảo mật
2FA có bảo vệ chống phishing không?
Mã OTP giảm rủi ro nhưng không chống phishing 100%. Kẻ tấn công có thể:
- Tạo trang giả → user nhập mã → kẻ tấn công dùng mã ngay lập tức (real-time phishing)
- Giải pháp tốt hơn: kết hợp 2FA với FIDO2/WebAuthn (chưa hỗ trợ)
Dữ liệu 2FA lưu ở đâu?
| Dữ liệu | Nơi lưu | Bảo mật |
|---|---|---|
| Cấu hình 2FA | twoFactorAuthSettings | Chỉ admin truy cập được |
| Liên kết verifier | Quản lý bởi plugin-verification | Hashed/encrypted |
| 2FA token tạm | JWT token | Có thời hạn, chứa user ID |
Session check trả về thông tin gì?
Action twoFactorAuth:sessionCheck trả về:
json
{
"enforce": true,
"verifiers": [
{
"name": "sms-verifier",
"title": "SMS Verification",
"verificationType": "sms-otp",
"verificationTypeTitle": "SMS OTP",
"boundInfo": { "phone": "****1234" }
}
]
}enforce: Có bắt buộc 2FA khôngverifiers: Danh sách verifier khả dụng với thông tin liên kết (đã mask)
Xử lý sự cố
Lỗi "You have already bound this verifier"?
User đã liên kết verifier này trước đó. Action bind kiểm tra getBoundRecord() trước khi cho phép liên kết. Nếu muốn đổi, cần xóa liên kết cũ trước.
Lỗi 401 khi gọi sessionCheck?
2FA token tạm thời không hợp lệ hoặc đã hết hạn. Nguyên nhân:
- Token đã quá thời gian cho phép
- Token bị thiếu hoặc sai format
- Giải pháp: quay lại bước đăng nhập (nhập email + password) để lấy token mới
Plugin không load được?
Kiểm tra:
plugin-verificationđã bật chưa?- Database migration đã chạy chưa? (
yarn digiforce-nc upgrade) - Collection
twoFactorAuthSettingstồn tại trong database?