Cookie không đi qua domain khác nhau được — Domain=example.com chỉ phủ được example.com và subdomain của nó, không thể phủ example.vn. Nên SSO đa domain phải dựa vào một Identity Provider (IdP) trung tâm và redirect, không phải chia sẻ cookie.
Kiến trúc:
1. Mọi app trỏ về cùng một IdP tại auth.example.com.
2. IdP giữ phiên riêng của chính nó (cookie first-party trên domain IdP).
3. App A chưa đăng nhập → redirect sang IdP → IdP thấy đã có phiên → trả code về ngay, không hỏi mật khẩu lần nữa. Đó chính là trải nghiệm "single sign-on".
4. Mỗi app tự tạo phiên cục bộ của mình sau khi đổi code.
Hai thứ hay bị hỏi tiếp:
- Kiểm tra ngầm (silent check): trước đây dùng iframe ẩn gọi
/authorize?prompt=none. Cách này đang hỏng dần vì trình duyệt chặn cookie bên thứ ba (Safari ITP, Chrome). Thay thế: kiểm tra khi điều hướng trang (top-level redirect) và chấp nhận một nhịp nháy nhẹ, hoặc dùng access token ngắn + refresh phía BFF. - Single logout (SLO): khó hơn login nhiều. Thực tế phổ biến là IdP giữ danh sách các app đã đăng nhập trong phiên, khi logout thì gọi back-channel logout tới từng app để app tự hủy phiên cục bộ. Nếu bỏ qua bước này thì user "đăng xuất" ở IdP nhưng vẫn còn phiên ở app con.
Không nên: nhét token vào query string để chuyền qua lại giữa các domain — token lọt vào log, history và Referer.