Refresh token là gì? Cách hoạt động có khác gì so với token không?

Ở những bài trước chúng ta đã nói nhiều về JWT là gì? Vì sao phải sử dụng JWT, trong suốt quá trình sử dụng JWT chúng tôi có nhận được nhiều phản hồi về chủ đề JWT. Trong đó có một vấn đề mà có nhiều bạn chưa hiểu đó là 'Refresh token là gì'. Nếu bạn có chung một câu hỏi như vậy thì bài viết này sẽ dành cho bạn. 


Điều đầu tiên, nếu các bạn chưa hiểu về JWT là gì? Token là gì? Thì có lẽ nên dừng lại ở đây, vì các bán sẽ không hiểu được cụm từ "Refresh token" này đâu. Chính vì vậy, bạn hãy quay lại những bài viết trước kia để hiểu hơn. Hãy dừng lại nếu chưa hiểu về JWT là gì? Token là gì?

Và có một điều nữa đó là cách hoạt động của token JWT rất khác với Refresh token, tôi đã từng viết một bài viết giải thích rất rõ về cách hoạt động của một token thông qua một ví dụ về sinh viên đi ở trọ đó là : Authorization Framework: Access Token, Refresh Token cũng giống việc sinh viên thuê nhà trọ

Refresh token là gì?


Refresh token thực chất nó cũng chính là một token. Nhưng nó khác với Token Auth của JWT về chức năng đó là Refresh Token chỉ có một nhiệm vụ duy nhất đó là đề lấy một token mới, nêú token được cấp phát cho user hết hạn. Refresh token được cấp cho User cùng với token khi user xác thực đầu tiên nhưng thời gian của chúng khác nhau. Với token thì có thể 1 giờ, nhưng Refresh Token là có khi là 10 ngày.


Refresh token hoạt động như thế nào?


Trong thực tế của JWT, Refresh token đã được giới thiệu để cải thiện quy trình quản lý như sau.

  • Máy khách sử dụng tên người dùng và mật khẩu để xác thực
  • Máy chủ tạo token JWT với thời gian hiệu lực ngắn hơn (ví dụ: 10 phút) và Refresh Token với thời gian hiệu lực dài hơn (ví dụ: 7 ngày)
  • Khi máy khách truy cập vào giao diện yêu cầu xác thực, nó sẽ mang Token theo
  • Nếu Token chưa hết hạn, máy chủ sẽ trả về dữ liệu mà khách hàng cần sau khi xác thực
  • Nếu xác thực thất bại khi truy cập vào giao diện yêu cầu xác thực bằng Token (ví dụ: trả về lỗi 401), khách hàng sử dụng Refresh Token để áp dụng cho Token mới từ giao diện làm mới
  • Nếu Refresh Token chưa hết hạn, máy chủ sẽ cấp Token mới cho máy khách
  • Máy khách sử dụng Token mới để truy cập vào giao diện yêu cầu xác thực

Nhìn sơ qua ta cũng thấy cách làm việc của một Refresh Token khác hoàn toàn so với Token được giới thiệu phía trên.


Refresh token được lưu ở đâu?


Khác với token JWT được lưu ở Cookies, Session, hay localStorage thì Refresh Token được lưu ở database ở phía server (với tôi nó là vậy). Vì sao lại như vậy, vì Refresh Token sẽ không sử dụng cho việc khi máy khách yêu cầu trên giao diện, và nó chỉ được sử dụng khi một token hết hạn. Nó không ảnh hưởng đến hiệu suất của database, hay liên quan đến việc phản hồi từng yêu cầu của Client, nên nó không cần thiết phải lưu như một token bình thường.


Refresh token giúp được gì ngoài lấy token mới


Kiến trúc trên hay còn gọi là Refresh Token có thể hiểu là nó cung cấp một cách để vô hiệu hóa một token ở một User nào đó ngay ở phía máy chủ. Cụ thể là khi user logout, hoặc tồi tệ hơn nữa đó chính là "token bị đánh cắp" thì điều gì sẽ xảy ra? Mặc dù phương pháp này sẽ có một khoảng thời gian nhất định dựa theo nhiều điều kiện. Nhưng đối với một hệ thống đơn giản thì sử dụng kiến trúc này là khá ổn rồi. Còn những hệ thống lớn thì chưa đủ để đảm bảo việc bảo vệ tài nguyên cho người dùng. Thêm vào đó như là trustIP...


Tóm lại


Việc sử dụng JWT giúp cải thiện hiệu quả của các nhà phát triển trong việc phát triển các chức năng xác thực người dùng, giảm độ phức tạp của kiến trúc hệ thống, tránh một số lượng lớn các truy vấn bộ đệm và cơ sở dữ liệu và giảm độ trễ phản hồi của giao diện doanh nghiệp. Tuy nhiên, những ưu điểm này của JWT cũng làm tăng khó khăn trong việc quản lý Token. Bằng cách giới thiệu Refresh Token, không chỉ có thể tiếp tục sử dụng các lợi thế do JWT mang lại, mà còn có thể làm cho tính chính xác của quản lý Token đáp ứng nhu cầu của doanh nghiệp được nâng lên một tầm cao mới.

Tổng hợp các bài viết về javascript: https://bit.ly/2YKBvMR