Asked Jul 10th, 9:25 a.m. 343 2 2
  • 343 2 2
0

Tại sao Access Token không thể thay thế được cho Refresh Token? Refresh Token bảo mật hơn Access Token như thế nào? Tại sao chúng ta thực sự cần Refresh Token?

Share
  • 343 2 2

Refresh Token và Access Token về bản chất cũng chỉ là một cái token, cũng gửi về cho client và client lưu ở đâu đó như localstorage, session storage

Tại sao không để Access Token thời gian expiration time lâu như Refresh Token để đỡ khỏi tạo thêm một cái gọi là Refresh Token

Nếu tôi để Refresh Token và Access Token expiration time lâu như nhau ví dụ 30 ngày

Trong trường này để lộ Refresh Token thì rủi ro cũng chẳng khác gì lộ Access Token (trong trường hợp hệ thống không dùng Refresh Token và để expiration time lâu như Refresh Token)

Vậy câu hỏi chắc hẳn Refresh Token sẽ có cơ chế gì đó bảo mất hơn Access Token

2 ANSWERS


Answered Jul 11th, 3:16 a.m.
Accepted
+4

Thường thì refresh token sẽ yêu cầu client ID và secret để tạo access token mới nên nếu lộ refresh token thì chưa chắc user sẽ bị chiếm quyền vì cần phải có client ID và secret của bạn nữa. Kể cả trong trường hợp bạn bị lộ cả client ID và secret thì vẫn có thể dễ dàng rotate client secret để vô hiệu hóa secret cũ.

Với access token thì khác, nếu bạn để expiration time dài như 30 ngày hay 1 năm thì khi user bị lộ access token, sẽ không có cách nào để revoke token đó (trừ khi bạn có cơ chế revoke token, mà thường thì k có). Kể cả người dùng có đổi password cũng không thể cứu được, chỉ có xóa tài khoản thôi.

Vậy nên access token nên có expiration time ngắn, và client không nên lưu lại ở đâu cả, chỉ lưu lại refresh token để khi nào cần thì tạo access token mới thôi.

Share
Answered Jul 11th, 2:14 a.m.
+2

Với expire time ngắn, khi người dùng đóng tab và token expired, khi mở lại tab sẽ không sử dụng lại được nữa.

Với expire time dài, khi người dùng đóng tab, có rủi ro là người dùng khác mở trang web và vẫn trong phiên của người dùng cũ. (token sống lâu thì thường được lưu trong localStorage).

Về mặt lý thuyết thì accessToken và refreshToken là khá bảo mật vì được truyền qua header. Giao thức https sẽ mã hóa cả header nên sẽ ngăn chặn được việc nghe trộm từ hacker. So sánh với Authorization Code, authorization code được truyền qua url (dùng cơ chế redirect để authenticate), nên authorization code không chứa thông tin người dùng mà chỉ dùng để lấy access token. authorization code mặc dù dễ lộ, nhưng dễ bị phát hiện và vô hiệu hóa (authorization code chỉ dùng 1 lần, cấp phát 1 access token, nếu hacker tranh dùng thì sẽ có 2 request lấy access token với cùng 1 authorization code và access token sẽ bị invalidate ngay lập tức).

Việc cài đặt expire time tùy thuộc vào thực tế. Với mobile app, expire time thường được cài khá lâu vì các app chạy trên private device. Hay các mạng xã hội như FB cũng dùng expire time dài. Nhưng các app cần bảo mật cao như app ngân hàng, thậm chí còn không refresh token và mỗi phiên làm việc chỉ tồn tại trong vài phút.

Share
Viblo
Let's register a Viblo Account to get more interesting posts.