Skip to content

会话(Session)

认证后需要统一治理「这次登录活了多久、最近是否活跃、能否被撤销」。IAM 把每次登录建模为一个 AuthSession,并用不透明 Token 索引它。

// 会话记录
record AuthSession(
sessionId, userId, clientType, clientInstance,
ipAddress, userAgent, loginAt, lastSeenAt,
expiresAt, revokedAt, logoutAt, revokeReason
) {
boolean revoked();
void revoke(Instant at, String reason);
void touch(Instant at); // 更新 lastSeenAt
}
// 令牌记录:sessionId -> principal 的 Redis 索引
record TokenRecord(sessionId, principal, expiresAt)

源码见 muer-sessiontouchiam.session.touch-interval(默认 10m)节流。

方法 路径 说明
GET /iam/sessions 列出当前用户会话(200/401)
POST /iam/sessions/{sessionId}/revoke 撤销指定会话(204/401/404)
POST /iam/sessions/revoke-others 撤销其他会话(204/401)
POST /iam/auth/logout 登出(204/401)
Terminal window
curl -X POST "$BASE/iam/sessions/$SESSION_ID/revoke" \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
--data '{"reason":"QUICKSTART_COMPLETE"}'
# 204

撤销后该 token 失效(读取返回 401),但其他独立 session 不受影响。

Profile 切换会创建独立 session,见 Profile 切换Session 撤销