Hai tác vụ cùng thấy access token hết hạn và cùng đổi một refresh token có thể khiến kết nối ngừng hoạt động. Với refresh token nhiều worker, vấn đề không chỉ nằm ở thời hạn token: cần quyết định ai được refresh, lưu kết quả ở đâu và làm gì khi phản hồi đã đến nhưng chưa được ghi lại.
Rotation biến token thành một chuỗi trạng thái
Trong cơ chế Auth0 được dẫn, một lần đổi refresh token tạo token mới; tái sử dụng token cũ có thể kích hoạt bảo vệ cả token family. Điều này là kiểm soát an toàn, không phải tín hiệu nên tắt rotation. Chính sách overlap, thời hạn và trường hợp tái sử dụng cần đọc đúng provider đang dùng, không áp một quy tắc chung cho mọi OAuth server.
Các worker không nên tự giữ bản refresh token độc lập rồi ghi đè nhau. Một thiết kế có thể gom việc refresh về một đầu mối cho từng kết nối, đồng thời lưu phiên bản để ngăn kết quả cũ thay thế kết quả mới. Khóa phải có phạm vi đúng connection; khóa toàn bộ ứng dụng có thể gây nghẽn, còn khóa chỉ trong bộ nhớ một worker không bảo vệ nhiều máy.
Phiếu kết nối trước khi thiết kế khóa
| Thông tin | Quyết định cần có |
|---|---|
| connection_id | Đại diện tài khoản/provider nào? |
| Phiên bản token | Ai được thay phiên bản đang có? |
| Chủ refresh | Cơ chế một đầu mối và hết hạn quyền giữ khóa |
| Lưu trữ | Kho bí mật, quyền đọc/ghi và mã hóa phù hợp |
| Phục hồi | Ai xác minh hoặc cấp quyền lại khi chưa rõ kết quả? |

Ví dụ giả định: A đã đổi, B vẫn giữ bản cũ
A và B đọc phiên bản 7. A đổi thành công rồi lưu phiên bản 8. Nếu B không kiểm tra lại mà tiếp tục gửi token phiên bản 7, provider có thể coi đó là tái sử dụng. Trong phương án đề xuất, B nhận thấy phiên bản đã đổi và dùng trạng thái mới theo quyền được cấp. Không ghi token thật vào phiếu sự cố; chỉ ghi connection_id đã giảm định danh, phiên bản và mã lỗi được phép.
Cửa sổ khó nhất: provider đã đổi, ứng dụng chưa lưu
Mất kết nối sau khi provider xử lý tạo ra trạng thái chưa rõ. Gửi lại mù bằng token cũ có thể làm tình hình xấu hơn. Phải có nhánh phục hồi phù hợp tài liệu provider: xác minh trạng thái nếu có khả năng, áp dụng overlap đúng phạm vi được hỗ trợ hoặc yêu cầu cấp quyền lại. Không có bảo đảm “exactly once” chỉ nhờ thêm một khóa ở phía ứng dụng.
- Đề xuất thử hai worker cùng refresh trong môi trường được phép.
- Đề xuất thử worker mất quyền giữ khóa trước khi ghi kết quả.
- Đề xuất thử timeout sau request và token bị thu hồi thực sự.
- Xác nhận cảnh báo đến đúng owner và không chứa secret.
Đây là bộ tình huống nghiệm thu, chưa phải kết quả runtime đã thực hiện. Ưu tiên bảo toàn quyền truy cập đúng người và khả năng phục hồi hơn việc che mọi lỗi bằng retry.
Đừng để bàn giao chỉ còn một chuỗi secret
Khi chuẩn bị kết nối OAuth cho phần mềm doanh nghiệp, hãy chốt bảng chủ refresh, kho lưu và người xử lý mất kết nối. Với một request có tác động nhưng timeout, xem thêm cách phân biệt chưa rõ kết quả API; lỗi xác thực và lỗi tác động nghiệp vụ cần hai nhánh xử lý riêng.
Nguồn tham khảo và giới hạn
Auth0: Refresh Token Rotation (đọc ngày 13/10/2026). Các biểu mẫu và tình huống trong bài là hướng dẫn biên tập hoặc ví dụ giả định; không phải kết quả kiểm thử, dữ liệu khách hàng hay cam kết năng lực đã triển khai. Cách áp dụng cần đối chiếu nền tảng và quyền thực tế.

