Anonystick

anonystick@gmail.com

Refresh token và access token làm rõ những câu hỏi?

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 jwtthườ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...