Thứ Bảy, Tháng Mười Hai 3, 2022
31 C
Ho Chi Minh City
spot_img

So sánh JSON Web Token(JWT) và Session Cookies trong việc Authentication – Vantien’s blog

Must read

Openlivenft
Openlivenfthttps://openlivenft.info/
Trang tổng hợp thông tin nhanh - mới nhất về NFT, COIN, Metaverse, tài chính, crypto của OpenliveNFT
Xin chào toàn bộ những bạn. Tuần trước mấy đồng đội trong công ty nhân buổi chiều rảnh rỗi cũng có ngồi bàn luận với nhau về JWT. Có lẽ vì đa số đồng đội cũng chưa từng thao tác qua với JWT hoặc đã từng thao tác nhưng thường dùng package nên về thực chất, chính sách hoạt động giải trí, nguyên do dùng, … mọi người vẫn chưa thật sự hiểu rõ .
Chính vì thế nhân một ngày đẹp trời mình quyết định hành động vác sách bút đi tầm sư học đạo, đi muôn nơi thỉnh kinh. Lần ra đi này mình vô cùng quyết tâm với lời thề nếu không hiểu được JWT quyết sẽ không trở lại. Mọi người cùng đón xem hành trình dài của mình nhé .

Chuẩn bị đi thỉnh kinh

Để chuyến đi thỉnh kinh được diễn ra suôn sẻ thì mình xin phép làm rõ một và yếu tố như sau nhé .

Chắc các bạn cũng biết rằng HTTP là một chiếc cầu nối giữa client và server (giao thức truyền tải). Và nó là một giao thức stateless (stateless protocol).

Vậy stateless là gì nhể ? Giải thích một cách dễ hiểu thì một giao thức stateless là giao thức mà sau khi client gửi tài liệu lên server, server thực thi xong, trả hiệu quả lại về cho client thì “ quan hệ ” giữa client và server bị “ cắt đứt ”, server không lưu lại bất kỳ tài liệu trạng thái gì của client .

Trong cuộc đời nào được như ý muốn
Nhiều lúc yêu thương đã không trọn vẹn
Nên chấp nhận cuộc tình chia hai lối
Còn níu kéo cũng chẳng để làm chi

Để lý giải bằng ví dụ thì điều này có nghĩa là nếu như tất cả chúng ta đăng nhập vào thông tin tài khoản Facebook. Sau đó tất cả chúng ta chuyển dời sang trang Settings thì tất cả chúng ta sẽ phải đăng nhập lại vì server không giữ trạng thái của tất cả chúng ta. Tuy vậy bài toán này đã được xử lý với session và cookies. Bằng cách lưu giữ thông tin tại 2 phía client và server trải qua session và cookies mà server hoàn toàn có thể biết được client này đã đăng nhập được hay chưa .
Ngoài Session và Cookies ra thì vẫn còn 1 vài kỹ thuật nữa được sử để xác nhận đăng nhập ( authentication ). Trong đó có JWT .

JWT là gì?

JWT là viết tắt của JSON Web Token – một tiêu chuẩn mở ( RFC 7519 ) cho việc bảo việc trong truyền tải tài liệu giữa những endpoint .
JSON Web Token gồm có 3 phần, được ngăn cách nhau bởi dấu chấm (. ), đó là :

  1. Header
  2. Payload
  3. Signature

Header

Gồm 2 phần, tiên phong là loại token ( ở đây là JWT ) và phần tiếp theo là loại thuật toán sử dụng để mã hóa ví dụ như HMAC SHA256 hay RSA. Nếu không định nghĩa thì mặc định sẽ sử dụng thuật toán mã hóa HS256 .

{
    "typ": "JWT",
    "alg": "HS256"
}

Payload

Payload sẽ chứa những thông tin cơ bản của user cần xác nhận. Ví dụ như : tên, tuổi, permissions, …

Có 2 lưu ý khi định nghĩa payload đó là:

  • Không cho password, thông tin cần bảo mật vào payload có thể bị decode
  • Không cho quá nhiều thông tin vào payload vì sẽ tạo ra độ trễ cho server

Ví dụ :

{
  "user_name": "vantien",
  "user_id": "1",
  "role": "ADMIN",
}

Signature

Phần sau cuối là chữ ký, nó được tạo ra bằng cách phối hợp và mã hóa 4 thứ sau :

  1. header
  2. payload
  3. Chuỗi khóa bí mật (secret key)
  4. Thuật toán mã hóa

Ví dụ như sau :

HS256(
    base64UrlEncode(header) +
    “.” +
    base64UrlEncode(payload),
    secret_key
)

Cuối cùng

Sau khi phối hợp 3 phần header, payload và signature tất cả chúng ta sẽ có một chuỗi JWT hoàn hảo .

Cơ chế xác thực đăng nhập bằng Session và Cookies (Session-Based Authentication)

Với chính sách này thì sau khi đăng nhập, server sẽ tạo ra session cho user và lưu vào đâu đó ( hoàn toàn có thể là file, memory, database, … ). Sau đó một session ID sẽ được lưu vào trong cookies của trình duyệt. Trong khi user truy vấn vào website thì session ID đó sẽ được trình duyệt lấy ra và gửi kèm theo trong request. Nhờ vậy mà server hoàn toàn có thể tham chiếu đến session đã lưu trên server để biết user này đã đăng nhập hay chưa. Sau khi user log-out ( đăng xuất ) thì session sẽ bị xóa đi .
Vậy Cookies là gì ? Các bạn hãy đọc bài viết này của mình nhé : Bạn đã hiểu rõ về HTTP Cookie ?

Cơ chế xác thực đăng nhập bằng Token – (Token-Based Authentication)

Khi nhắc đến chính sách xác nhận đăng nhập bằng Token ( Token-Based Authentication ) thì đa số người ta thường nhắc đến JWT. Trước đây thì những website chỉ sử dụng chính sách Session và Cookies tuy nhiên lúc bấy giờ chính sách sử dụng Token vô cùng thông dụng và dần trở thành một tiêu chuẩn cho việc xác nhận đăng nhập .

Cơ chế của JWT là như thế nào? Khi user đăng nhập thì server sẽ tạo ra một đoạn token được mã hóa và gửi lại nó cho client. Khi nhận được token này thì client sẽ lưu trữ vào bộ nhớ (thường sẽ là local storage). Sau đó mỗi khi client request lên server thì sẽ gửi kèm theo token. Từ token này server sẽ biết được user này là ai.

Nên dùng cách nào?

Xác thực bằng JWT là chiêu thức được mà mình nghĩ sẽ trở thành 1 tiêu chuẩn trong tương lai để dần sửa chữa thay thế cho Session, Cookies khi mà SPA đang trở thành xu thế. Ngoài ra nó hoàn toàn có thể scale tốt hơn so với Session Cookies vì token sẽ được tàng trữ ở phía client trong khi Session thì phải lưu ở sever và đây hoàn toàn có thể là yếu tố khi một số lượng lớn người dùng sử dụng mạng lưới hệ thống cùng một lúc .
Tuy nhiên, một điểm yếu kém với JWT là có size lớn hơn nhiều so với session ID vì JWT chứa nhiều thông tin người dùng hơn. Ngoài ra tất cả chúng ta cần phải cần thận trong việc cho thông tin người dùng vào JWT vì nó hoàn toàn có thể bị decode .

Nếu bài viết có gì sai xót hoặc bạn có điều gì thắc mắc vui lòng để lại comment bên dưới nhé. Cảm ơn bạn đã đọc bài viết này!

Source: https://openlivenft.info
Category : TIN COIN

Đánh giá bài post
- Advertisement -spot_img

More articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisement -spot_img

Latest article

Ethereum là gì? | OpenliveNFT