SecLab
Authentication & SessionwalkthroughĐộ khó 3/526 phút

Vòng đời session, và logout thật sự làm gì

Mục tiêu: Sau bài này bạn nói được, khi một người dùng bấm Đăng xuất, chính xác những gì hết hiệu lực và những gì không.

V7V9A07:2025RFC 9700jwt
Bước 1 / 5 · read6 phút

Logout là ba việc, và hầu hết hệ thống làm một

Câu hỏi đáng hỏi về mọi hệ thống dùng JWT: khi người dùng bấm Đăng xuất, cái gì thật sự hết hiệu lực?

Với hầu hết triển khai, câu trả lời là: cookie trong trình duyệt đó bị xoá. Hết. Access token vẫn hợp lệ tới exp, refresh token vẫn dùng được, và session ở identity provider vẫn mở.

Logout đầy đủ là ba việc riêng biệt, và biết mình đang làm việc nào là toàn bộ nội dung bài này:

ViệcXoá gìKhông có nó thì sao
1. Local logoutCookie/token trong client nàyNgười kế tiếp dùng máy đó vẫn đăng nhập
2. Thu hồi refresh tokenRefresh token ở authorization serverKẻ có refresh token vẫn lấy access token mới mãi mãi
3. Kết thúc session ở IdP (RP-initiated logout)Session cookie ở identity providerBấm "Đăng nhập" lại vào ngay không cần mật khẩu

Việc thứ hai là việc quan trọng nhất về mặt bảo mật và cũng là việc hay bị bỏ nhất. Refresh token thường sống nhiều ngày hoặc nhiều tuần; nếu logout không thu hồi nó thì "đăng xuất khỏi mọi thiết bị" là một nút không làm gì.

Việc thứ ba gây bất ngờ cho người dùng theo cách nghiêm trọng: trên một máy tính dùng chung, người dùng bấm Đăng xuất, thấy trang đăng nhập, và tin là mình đã an toàn — rồi người tiếp theo bấm Đăng nhập và vào thẳng tài khoản đó vì session ở IdP vẫn còn. Về mặt kỹ thuật không có gì hỏng; về mặt người dùng thì lời hứa "đăng xuất" đã bị phá.

Còn access token thì sao? Không thu hồi được. Đây không phải một thiếu sót cần vá mà là tính chất của token tự chứa: nó được verify bằng chữ ký, không bằng một lần tra cứu, nên không có chỗ nào để đánh dấu "cái này đã bị thu hồi". Bạn có ba lựa chọn, và chỉ ba:

  1. Thời gian sống ngắn (5–15 phút) — chấp nhận một khoảng lọt. Đây là câu trả lời đúng cho hầu hết hệ thống.
  2. Tra cứu mỗi request — bỏ luôn lợi ích của token tự chứa, quay về session ở server.
  3. Danh sách thu hồi — một cache các jti đã huỷ, kiểm ở mọi request. Nó là (2) đội lốt (1), và nó thêm một dependency vào đường xác thực — bài m1-challenge đã cho thấy chuyện gì xảy ra khi dependency đó chết.
Xem lộ trình

Bình luận

Tham gia thảo luận
Đăng ký để bình luận

Bình luận cần tài khoản đã hoàn thành ít nhất một bài học. Điều kiện đó là thứ giữ cho luồng thảo luận này còn đáng đọc: mỗi ý kiến gắn với một người có thể bị hỏi lại, và reputation tích luỹ theo thời gian.

Đăng kýĐăng nhập

Bạn vẫn đọc được toàn bộ bình luận dưới đây mà không cần tài khoản. Đăng nhập xong bạn sẽ quay lại đúng chỗ này, không phải đầu trang.

Đang tải bình luận…