Mục lục

Bảo mật nâng cao: Ai đang lén dùng tài khoản của bạn?

Xây dựng hệ thống quản lý Session chuyên nghiệp như Facebook/Netflix: Theo dõi thiết bị, IP Location và tính năng Remote Logout.

Bạn vào Facebook -> Settings -> Security -> "Where you're logged in". Bạn thấy một danh sách thiết bị: "iPhone 15 - Hanoi", "MacBook - Ho Chi Minh". Bạn bấm "Log out" vào cái thiết bị lạ hoắc.

Đây chính là tính năng Session Management mà mọi Enterprise App đều phải có.

1. Data Modeling

Thay vì chỉ lưu 1 session string đơn giản, ta cần lưu một Object chi tiết vào Database (Redis/SQL).

ts:
model Session {
  id           String   @id @default(cuid())
  userId       String
  sessionToken String   @unique
  expires      DateTime
  
  // Metadata quan trọng
  ipAddress    String?  // 1.2.3.4
  userAgent    String?  // Mozilla/5.0 (Macintosh...)
  deviceType   String?  // Mobile/Desktop
  browser      String?  // Chrome/Safari
  os           String?  // iOS/Windows
  lastActive   DateTime @default(now())
  country      String?  // Vietnam
}

2. Thu thập Metadata (Middleware)

Trong Next.js Middleware hoặc Route Handler login, ta có thể lấy thông tin này dễ dàng.

ts:
import { userAgent } from 'next/server';

// Trong API Login Route
const { device, browser, os } = userAgent(request);
const ip = request.headers.get('x-forwarded-for') || '127.0.0.1';

// Lưu vào DB khi tạo session
await db.session.create({
  data: {
    userId,
    sessionToken,
    deviceType: device.type, // 'mobile'
    browser: browser.name,   // 'Chrome'
    os: os.name,             // 'Windows'
    ipAddress: ip,
  }
});

3. Remote Logout (Đăng xuất từ xa)

Tính năng này cứu mạng user khi họ lỡ quên đăng xuất ở máy công cộng (quán Net).

Cơ chế:

  1. User A bấm "Logout Session X".
  2. Server xóa bản ghi Session X trong Database.
  3. Lần tới khi "kẻ trộm" dùng máy X gọi API -> Server check DB thấy Session X không còn -> Trả về 401 Unauthorized -> Client tự động Redirect về Login.

4. Suspicious Login Detection (Cảnh báo đăng nhập)

Nếu User thường xuyên login từ Việt Nam, bỗng nhiên có login từ Nga? -> Cảnh báo ngay!

  1. GeoIP: Dùng thư viện geoip-lite hoặc API (như Vercel/Cloudflare) để map IP -> Country.
  2. Logic: So sánh Country hiện tại với lastLoginCountry trong DB.
  3. Action: Nếu khác -> Gửi Email: "Có phải bạn vừa đăng nhập từ Nga không?".

Kết luận

Một hệ thống Authentication tốt không chỉ là "Đăng nhập được". Nó phải cho User cảm giác Kiểm soát (Control)An tâm (Peace of mind). Những tính năng nhỏ như "Log out all devices" chính là thứ tạo nên sự khác biệt của sản phẩm chuyên nghiệp.

Quảng cáo
mdhorizontal