Ứng dụng JWT với Laravel cho người mới bắt đầu

  1. Định nghĩa JWT
    JWT là viết tắt của JSON WEB TOKENS là một phương tiện để truyền đạt thông tin giữa nhiều bên với nhau dưới dạng 1 chuỗi JSON. Hay đơn giản nó là một tiêu chuẩn được sử dụng cho việc xác thực thông tin người dùng.

    Hai phương pháp phổ biến nhất dùng trong việc xác thực đó là:
    + Phương thức xác thực truyền thống: (Session Cookies): Sử dụng tên người dùng và mật khẩu. Đảm bảo thông tin đó là chính xác (đăng nhập)
    Trong phương thức xác thực này, người dùng đăng nhập từ máy khách (sử dụng tên đăng nhập, mật khẩu…). Máy chủ thực hiện xác thực. Nếu thông tin gửi tới máy chủ là đúng thì thông tin người dùng được lưu trữ trong session trên máy chủ. Một id session duy nhất được gửi lại phía trình duyệt, và được sử dụng cho mỗi lần thực hiện request xác thực tiếp theo.
    + JWT: Đảm bảo rằng người dùng đang gửi thông tin đến máy chủ của bạn chính là người đã đăng nhập trong quá trình xác thực.
    Trong phương thức xác thực này khi người dùng đăng nhập thành công thì serve sẽ sinh ra một đoạn mã, và gửi đoạn mã token này tới client. Đoạn mã này thường được lưu vào cookie hoặc local storage của trình duyệt và cũng được đính kèm vào phần header trong mỗi request tiếp theo.
  2. Tạo sao lại sử dụng JWT
    Thay vì lưu trữ thông tin người dùng đăng nhập trên máy chủ sau khi xác thực, JWT tạo ra 1 mã token với 1 khóa bí mật để không bị giả mạo. Mỗi khi 1 yêu cầu được gửi đi, token đó sẽ được xác minh và gửi lại response.
    – Khác biệt giữa xác thực session và jwt:
    Đối với xác thực bằng session cookie: Trạng thái người dùng được lưu trữ trên máy chủ, một lần đăng nhập trên một máy chủ.
    Đối với xác thực thông qua token JWT: Trạng thái người dùng được lưu trữ trong mã token được gửi tới máy khách
    Một mã token có thể sử dụng cho nhiều máy chủ, nhiều thiết bị (web, smartphone, desktop). Chính vì lý do mở rộng và xác thực trên di động nên JWT được sử dụng trong 90% các mô hình web hiện đại.
  3. Cấu trúc của JWT
    Mã JWT về cơ bản là một chuỗi đã được mã , gồm 3 thành phần nhỏ, phân cách nhau bằng dấu chấm. Những phần này là:
    + Header
    + Payload
    + Signature
    Do đó, mã JWT sẽ có định dạng như này: header.payload.signature
Ví dụ về 1 chuỗi JWT hợp lệ và các thành phần của JWT

+ Header:
Gồm 2 thành phần:
type: JWT
alg: thuật toán để mã hóa, như là: HMAC SHA256 or RSA.
VD:
{
"alg": "HS256",
"typ": "JWT"
}

Sau đó, chuỗi json này sẽ được mã hóa để trở thành thành phần đầu tiên trong chuỗi token trả về.
+ Payload:
Phần thứ 2 trong chuỗi token gọi là payload. Nó là thành phần rất quan trọng vì đây là nơi sẽ lưu trữ thông tin về người dùng đã xác thực.
VD:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

Sau đó, chuỗi json này sẽ được mã hóa để trở thành thành phần thứ 2 trong chuỗi token trả về.

+ Signature:
Phần chữ kí được dùng để xác thực mã thông báo là đúng, chính xác chứ không phải giả mạo.
VD:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)


Như vậy là chúng ta đã tìm hiểu được các kiến thức cơ bản về jwt. Nó là gì, tại sao lại cần đến jwt và các thành phần của 1 chuỗi token JWT. Ở bài tiếp theo, chúng ta sẽ cùng nhau thực hiện 1 ứng dụng demo với framwork Laravel.

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *