Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

Jwt

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Jwt


    🔐 JWT (JSON Web Token): Token hóa hiện đại cho xác thực không trạng thái


    Trong hệ thống hiện đại, đặc biệt là kiến trúc vi dịch vụ (microservices) và frontend-backend tách rời (SPA, mobile apps), JWT là một cơ chế phổ biến để truyền tải thông tin xác thực và phân quyền giữa các thành phần hệ thống mà không cần duy trì trạng thái phía máy chủ.
    🧩 JWT là gì?


    JWT (JSON Web Token) là một token nhỏ gọn, tự chứa, được sử dụng để truyền tải thông tin một cách an toàn dưới dạng JSON, chủ yếu trong các ngữ cảnh:
    • Xác thực người dùng (Authentication)
    • Phân quyền truy cập (Authorization)
    • Trao đổi thông tin an toàn giữa các dịch vụ

    🏗 Cấu trúc JWT


    JWT bao gồm 3 phần, phân tách bằng dấu . và được mã hóa dưới dạng Base64Url:
    plaintext

    Copy


    Edit


    <Header>.<Payload>.<Signature>
    📌 1. Header


    Chứa metadata như:
    json

    Copy


    Edit


    { "alg": "HS256", "typ": "JWT" }
    • alg: Thuật toán ký (HS256, RS256…)
    • typ: Loại token, thường là JWT
    📌 2. Payload (Claims)


    Bao gồm các claims – dữ liệu định danh hoặc tùy biến. Ví dụ:
    json

    Copy


    Edit


    { "sub": "user123", "iss": "auth.myapp.com", "exp": 1713000000, "roles": ["admin", "editor"] }
    • sub: Chủ thể (subject)
    • iss: Nhà phát hành (issuer)
    • exp: Thời gian hết hạn (epoch timestamp)
    • roles, scope: Claims tùy chỉnh
    ⚠️ Payload không được mã hóa – mọi dữ liệu ở đây có thể bị xem nếu JWT bị lộ.
    📌 3. Signature


    Được tạo bằng cách:
    plaintext

    Copy


    Edit


    HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )
    • Mục tiêu: đảm bảo tính toàn vẹn – nếu token bị chỉnh sửa, signature sẽ không khớp.

    🛠 Cách sử dụng trong hệ thống thực tế
    1. Client login ⟶ nhận JWT từ server sau khi xác thực.
    2. Client đính kèm JWT trong header (thường là Authorization: Bearer <token>) cho các request tiếp theo.
    3. Server xác minh chữ ký và trích xuất thông tin từ claims để xử lý phân quyền.
    JWT có thể được xác thực mà không cần truy vấn database/session store, giúp giảm tải và cải thiện hiệu suất.

    🔄 JWT vs SAML: So sánh nhanh
    Định dạng JSON XML
    Nhẹ
    SSO Có, nhưng cơ bản Tối ưu cho SSO
    Hỗ trợ thiết bị di động ✅ Rất tốt ❌ Giới hạn
    Dễ tích hợp frontend


    ➡️ Chọn JWT nếu bạn triển khai web/mobile app, microservices, hoặc muốn xác thực nhẹ nhàng, hiệu quả.
    ➡️ Chọn SAML nếu bạn làm việc trong môi trường doanh nghiệp, cần tích hợp với hệ thống SSO lớn.
    🧠 Mẹo thực chiến DevOps
    • 🛑 Không tin tưởng nội dung payload nếu bạn không xác minh signature.
    • 🔒 Nếu chứa thông tin nhạy cảm (email, vai trò, dữ liệu kinh doanh), hãy mã hóa thêm payload.
    • ⏱ JWT nên có exp ngắn hạn (5–15 phút) + refresh token nếu cần kéo dài phiên.
    • 🚫 Đừng lưu JWT trong localStorage nếu có thể – nên dùng httpOnly secure cookie để giảm nguy cơ XSS.

    🔐 Kết luận


    JWT là nền tảng cho xác thực không trạng thái, phù hợp với mô hình phân tán và microservices hiện đại. Tuy nhiên, hiểu rõ giới hạn bảo mật và kiểm soát thời hạn/lưu trữ là điều bắt buộc để khai thác hiệu quả và an toàn trong môi trường DevOps.
    Đặng Quang Minh, CCIEx2#11897 (Enterprise Infrastructure, Wireless), DEVNET, CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X