- vừa được xem lúc

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

0 0 101

Người đăng: Anony Stick

Theo Viblo Asia

Ở 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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 417

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 786

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 380

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 470

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 436