Nội dung bài viết
Video học lập trình mỗi ngày
JWT những câu hỏi thường gặp
Thật ra ở Tips javascript thì chủ đề về JWT đã quá nhiều rồi, hơn 10 bài viết về JSON WEB TOKEN. Trong đó đã giải thích về nhiều khái niệm liên quan như, refresh token, access token, vv... Đa số các bạn đều hiểu và tiếp cận tốt về công nghệ này, còn số ít vẫn còn mơ hồ, và tôi có nhận một số câu hỏi về Authentication
.
Chính vì vậy trong bài viết cuối cùng về chủ đề JWT
này, tôi sẽ làm sáng tỏ một số câu hỏi mà tôi nhận được trong page javascript Việt Nam
, dưới đây là tôi liệt kê một số câu hỏi tiêu biểu mà các bạn thường thắc mắc nhiều nhất. Hãy xem qua những câu hỏi dưới đây:
- Mình dùng luôn Refresh token thay cho access token có được không?
- Vì sao khi access token hết hạn thì cho hiện trang login luôn cho khoẻ?
- Điều gì xảy ra khi token bị đánh cắp?
- Phải làm gì khi JWT bị đánh cắp?
- Phía Server có thể phát hiện JWT đăng nhập bởi hacker hay không?
- Tại sao token không nên lưu ở storeLocal mà nên ở Cookie?
Lưu ý bài này chỉ là giải thích, nếu có những code demo về jwt
thì tôi sẽ bỏ link trong đó. Bạn nào muốn thì ghé qua bài viết cũ mà tham khảo nhé.
Điều gì khiến JWT phổ biến
Đây cũng có thể là một câu hỏi, anh em ai cũng hiểu jwt
thường sử dụng để tạo một mã định danh (token) cho các ứng dụng di động và API services. Token đó không giống như các session kiểu truyền thống mà là chứa luôn dữ liệu người dùng trực tiếp.
Lý do mà khiến JWT
trở nên phổ biến trong những năm gần đây chính xác là 2014 là chúng có thể chứa được nhiều kiểu dữ liệu như JSON
, và nó có nhiều lợi ích so với các kiểu truyền thống là:
jwt
không trạng thái, có thể mang hay chứa những dữ liệu của người dùng trực tiếp.jwt
không cần phải triển khai phía máy chủ như kiểu truyền thống session database, session cache.
Bởi vì sao mà không trạng thái? Vì khi nhận được token đó phía server
chỉ cần giải mã thông qua một "khoá mí mật", do đó giải mã ra rồi thì có dữ liệu điều này tránh cho việc xâm nhập nhiều vào database
và tăng thêm thời gian phản hồi, nói cho nhanh là tăng hiệu suất đó. Đó là lý do vì sao JWT phổ biến đấy
Refresh token thay cho access token có được không?
Giờ đây chúng ta đi vào câu hỏi nếu có gì thiếu sót thì mong cao nhân chỉ giáo, đầu tiên đó một câu hỏi trong message facebook.
ASK
: Mình dùng Refresh token thay cho access token có được không?
REP
: Bạn không được phép làm điều này, vì đối với khoảng thời gian bảo mật, thời gian hiệu lực của mỗi access token
truy cập thường không được đặt quá lâu và refresh token
là để kéo dài thời gian hiệu lực của mã thông báo truy cập. Việc tạo ra refresh token
không phải để cho bạn thay thế điều như bạn nói, mà nó giúp hệ thống lấy lại được access token
mới, mỗi khi nó hết hạn. Cũng như không cần phải lục lọi lại database để check thông tin khách hàng của bạn.
Vì sao khi access token hết hạn thì cho hiện trang login luôn cho khoẻ?
Câu hỏi rất hay, theo tôi đánh giá là vậy. Đúng là như vậy, tại sao khi access token
hết hạn thì quay lại trang login luôn cho rồi, chứ mất công đi renew token làm gì vậy?
Quay lại cách mà accesss token
làm việc thì, chúng ta thấy đa số là hết hạn tầm khoảng hai tiếng từ khi chúng sinh ra. Sau khi hết hạn bạn không thể để người dùng cứ 2 tiếng lại phải login một lần chứ? Trừ khi bạn cần họ, như banking internet
vậy. Vì bạn cần bank, còn những trang như facebook
bạn thử cho họ cứ 2 giờ login lại xem. Đảm bảo out ngay khi lập nghiệp đúng không? Chính vì vậy, cứ hết hạn server và lập trình viên phải uyển chuyển như thế nào để người dùng đang sử dụng mà vẫn không biết chuyện gì đang xảy ra. Nếu bạn cần CODE thì link ngay phía dưới.
Xem thêm: Sử dụng axios interceptors làm mới token khi hết hạn.
Nói chung là phải làm sao phát triển ứng dụng mượt mà, lấp đầy những lỗ hổng, những khó khăn, tạo cho user thoải mái là chúng mình khó nhọc tý cũng không sao. Ok chốt nhé!
Điều gì xảy ra khi token bị đánh cắp?
... Vì bài dài nên để viết sau nhé. Anh em nhớ comment khuyến khích hén... Trong lúc rảnh viết tiếp thì đọc qua series - Hiểu về Json Web Token
Còn nữa...