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
用途
- 调用
/admin/*端点 - 跨 Cell 管理操作
- TenantBootstrap 自动化
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 拒签
两端各拒一次:
weisyn/internal/auth.SignAccessTokenweisyn/sdk/jwtauth.VerifyAccessToken
空 uid → 消费方 actor 为空 → 下游读作管理视图。
过期机制
- Admin Token:签发时指定 TTL
- Cell Token:签发时指定 TTL
- 平台 JWT:15 分钟 TTL + refresh 检查
UserStatus
相关文档
- HTTP Gateway →
http-gateway.md - 密钥管理 →
secret-management.md - Actor 边界 →
actor-boundary.md