v1auth 上下文
会话
读取当前会话、列出全部会话、踢掉其他设备或指定会话。
会话端点全部要求会话令牌(受众 auth)。令牌解析、签名校验、会话存活判定与认证强度判定都在服务端统一完成,客户端不需要自己解码令牌。
端点
| 方法 | 路径 | 说明 | 提权 |
|---|---|---|---|
GET | /v1/auth/session | 读取当前会话 | 无 |
GET | /v1/auth/session/list | 列出本账号全部活跃会话 | 无 |
DELETE | /v1/auth/session/others | 踢掉除当前会话外的全部会话 | max_age=300 |
DELETE | /v1/auth/session/:sid | 踢掉指定会话 | max_age=300 |
GET /session
{
"success": true,
"user": {
"sub": "usr_...",
"username": "alice",
"display_name": "Alice",
"primary_email": "[email protected]"
},
"session": {
"sid": "ses_...",
"acr": "urn:muoceon:acr:aal1",
"auth_time": "2026-11-14T08:31:12.000Z",
"expires_in": 742
}
}| 字段 | 说明 |
|---|---|
session.sid | 会话标识;撤销单条会话时用它 |
session.acr | 当前认证强度,客户端据此判断某操作是否会被要求提权 |
session.auth_time | 认证时刻,max_age 由此推算 |
session.expires_in | 访问令牌剩余秒数,用于决定何时刷新 |
GET /session/list
查询参数:limit(默认 20,上限 100)、cursor。
{
"success": true,
"sessions": [
{
"sid": "ses_...",
"device_id": "device-8f3a1c2b",
"acr": "urn:muoceon:acr:aal1",
"auth_time": "2026-11-14T08:31:12.000Z",
"created_at": "2026-11-14T08:31:12.000Z",
"current": true,
"user_agent": "Mozilla/5.0 ...",
"ip": "203.0.113.7",
"country": "JP"
}
],
"next_cursor": null
}按最近活跃倒序。当前令牌对应的那一条 current: true。next_cursor 非空时带上它取下一页。
为什么用游标而不是 offset
会话列表在用户翻页的同时还在变化。offset 会让人看到重复项或漏掉项;游标钉住「上一页最后一条」,插入多少条都不影响下一页的起点。
DELETE /session/others
{ "success": true, "message": "Other sessions revoked", "revoked": 3 }保留当前会话,其余全部作废。这是账号被盗后的标准自救动作,因此每次调用都会写入安全记录。
DELETE /session/:sid
| 路径参数 | 说明 |
|---|---|
sid | 目标会话标识,必须属于当前账号 |
撤销当前会话本身也会立即让它的访问令牌失效。撤销其他会话时要求 max_age=300,未满足则返回 401 与提权挑战。