Token 签发与管理

wesgine Token 签发:Admin Token、Cell Token 的签发、吊销与安全约束。


两级 Token

级别用途签发
Admin Token管理 Hypervisor 级操作hyp.Tokens()
Cell Token管理单个 Cell 操作cell.Tokens()

Admin Token

API

hyp.Tokens().IssueAdminToken(ttl) string
hyp.Tokens().RevokeAdminToken(id) error

HTTP

POST /admin/tokens       → 签发 Admin Token
DELETE /admin/tokens/{id} → 吊销 Admin Token

用途

Bootstrap Token

wesgine serve --admin-token-bootstrap 启动时输出一次性 bootstrap token。

不走 logger——直接写 os.Stderr(即文件),因为 journal 常被转发出机器。


Cell Token

API

cell.Tokens().Issue(ctx, opts) string
cell.Tokens().Revoke(ctx, id) error

HTTP

POST /cells/{id}/tokens       → 签发 Cell Token
DELETE /cells/{id}/tokens/{id} → 吊销 Cell Token

Scope

Cell Token 携带 scope,控制可访问的端点:

Scope说明
cell:read只读访问
cell:chat对话(含会话变更)
cell:admin完整管理权限

Scope 路由

defaultCellRequiredScope 按路径前缀匹配 scope 要求。

Go switch 按序匹配——特殊路由必须排在泛前缀之前:

// ✅ 正确:特殊路由在前
case "/observe/evidence":  return "cell:admin"
case "/observe/":          return "cell:read"

// ❌ 错误:泛前缀在前会吞掉特殊路由
case "/observe/":          return "cell:read"
case "/observe/evidence":  // 永远到不了

JWT 吊销

吊销存储

internal/auth/revocation.go 管理 revoked_tokens 表。

Migrate

辅助 Migrate() 方法之一,运行在平台服务器上:

revocationStore.Migrate()  // CREATE TABLE IF NOT EXISTS revoked_tokens

Token 安全

空 UID 拒签

两端各拒一次:

空 uid → 消费方 actor 为空 → 下游读作管理视图。

过期机制


相关文档