Token là gì ? Authentication như thế nào với JWT trong NodeJS ?
-
Token không còn là một khái niệm mới mẻ , tuy nhiên không phải ai cũng có thể trả lời suôn sẻ khi được hỏi về nó ? Bài viết này sẽ đề cập tới khái niệm token và xác thực người dùng với JWT trong NodeJS, hy vọng qua bài viết các bạn sẽ hiểu hơn về khái niệm token , JWT này
Nội dung bài viết
- Token là gì ?
- Token bao gồm những gì ?
- Token thường được lưu ở đâu ?
- Gửi token từ client tới server như thế nào ?
- Authentication với JWT trong NodeJS
Token là gì ?
Thông thường , token được hiểu là một dạng chữ ký số hay chữ ký điện tử đã được mã hóa thành những con số trên những thiết bị chuyên biệt .
Token được tạo ra thường sẽ hết hạn sau một thời gian bất kể người sử dụng có dùng đến nó hay không .Đối với việc bảo mật các giao dịch, thanh toán online , nó được tạo ngẫu nhiên dưới dạng OTP chỉ dùng một lần .
Thế nhưng trong lập trình website hay bảo mật các ứng dụng , access token hay gọi tắt là token được tạo ra để sever có thể xác định danh tính của người sử dụng mỗi khi client call api từ đó trả về dữ liệu phù hợp , token có thể được sử dụng nhiều lần trong khoảng thời gian nó tồn tại.
Token bao gồm những gì ?
Token thường có 3 thành phần chính :
- Id : Thường là chuỗi ký tự xác định danh tính người sử dụng .
- Expired Time : Thời gian hết hạn của token
- Signature : Chữ ký - phần này sẽ được mã hóa qua thuật toán ( Hashing )
Token thường được lưu ở đâu ?
Sau khi người dùng đăng nhập , server sẽ trả về token , khi đó 2 nơi phổ biến nhất mà client thường lưu token đó là Cookies và localStorage .
Gửi token từ client tới server như thế nào ?
Có 3 cách để client gửi token tới sever
Cách 1 : Gửi qua header HTTP
Ví dụ về config header gửi đi dưới dạng jsonCách 2 : Gửi qua phương thức POST , PUT, ... Khi đó token sẽ được đặt trong body .
Cách 3 : Gửi dưới dạng params trong url request ( nhưng mình không khuyến khích dạng này vì giao diện url không thân thiện với người sử dụng , không ai muốn nhìn một đoạn mã rối mắt mà họ không hiểu j cả ^^)
Authentication với JWT trong NodeJSĐể bảo mật thông tin người dùng , lập trình viên có thể tự viết một thuật toán để decode và encode cho ứng dụng của mình , thế nhưng trong NodeJS , JWT thường được nhắc đến để xử lý vấn đề này .
JWT là một tiêu chuẩn bảo mật để 2 phía client và server có thể chia sẻ thông tin với nhau .
Mỗi khi người dùng sử dụng username và password để đăng nhập , thông tin này sẽ được server xác thực và trả về một token đã được mã hóa thông qua JWT cho client .
Mỗi token chỉ có một thời hạn nhất định , sau khi hết hạn đó , user sẽ phải nhập lại username và password nếu muốn truy cập hệ thống để nhận dữ liệu trả về . Khi đó sẽ sinh ra nhiều bất tiện , khó chịu trong sử dụng khi cứ 10-20p phải lặp lại thao tác đó một lần.
Và từ đó khái niệm access token và refresh Token ra đời. Chúng ta sẽ tìm hiểu kỹ hơn về JWT , tạo một sever authentication đơn giản để hiểu rõ hơn cách sử dụng JWT và refresh Token trong những bài viết sau .