Hành vi session
Refresh, rotation, cookie và logout behavior của Go Identity Service.
Hành vi session
Session owner
Identity Service owns session trong:
identity.auth_sessionSession gắn với:
account_id- optional
workspace_id - optional
member_id - optional
active_branch_id jtistatusexpires_at
Login tạo session
POST /api/auth/login:
- Validate
accountvàcredential. - Create
identity.auth_session. - Issue
refreshToken. - Set
refreshTokenbằngHttpOnly cookie. - Với single branch: session có branch scope ngay.
- Với multi branch: session chờ
POST /api/auth/select-branch.
Refresh behavior
POST /api/auth/refresh:
- Nhận
refreshTokentừ request body JSON fieldrefreshTokenhoặc refresh cookie. - Nếu body token và cookie token cùng tồn tại nhưng khác nhau, request invalid.
- Verify
refreshToken. - Load active session theo
session_id. - Check
jtitrong token khớp sessionjti. - Rotate session bằng cách update
jtivàexpires_at. - Issue rotated
refreshToken. - Set lại refresh
HttpOnly cookie.
Nếu session đã có branch scope, refresh trả branch-scoped accessToken và nextAction.type = load_current_context.
Nếu session chưa có branch scope, refresh trả accountAccessToken, branches[] và nextAction.type = select_branch.
Frontend note
First stale/missing /api/auth/refresh trả 401 là acceptable nếu sau đó login/refresh hợp lệ thành công.
Không xem 401 đầu tiên đó là blocker riêng nếu full auth flow vẫn pass.
Select branch cập nhật session
POST /api/auth/select-branch:
- Yêu cầu
accountAccessToken. - Validate
branchId. - Check branch cùng
workspace, active, và account có branch membership. - Update
identity.auth_sessionvới branch scope. - Issue branch-scoped
accessToken.
Logout behavior
POST /api/auth/logout confirm từ code:
- Có thể nhận access token qua
Authorization. - Có thể nhận
refreshTokentừ body hoặc cookie. - Nếu tìm được session hợp lệ, set
status = REVOKEDvàrevoked_at. - Clear refresh cookie.
- Trả success message.
README ghi compatibility note: no-token logout trả 200 AUTH_LOGOUT_SUCCESS.
Cookie behavior
Refresh cookie config dùng env vars:
CENTEROS_AUTH_REFRESH_COOKIE_NAMECENTEROS_AUTH_COOKIE_PATHCENTEROS_AUTH_COOKIE_SECURECENTEROS_AUTH_COOKIE_SAME_SITE
Cookie flags từ code:
HttpOnly=trueSecuretheo configSameSitetheo configMaxAgetheo refresh token expiry
TODO
- Chưa đóng: logout chưa nằm trong checkpoint chính.
- Chưa đóng: exact browser cookie behavior theo từng environment.