BitzOrcas 通过 Delegation 子系统支持操作员模拟。授权操作员可以临时代表另一个用户操作——用于客户支持和管理工作。
架构
操作员(管理员)→ DelegationTokenService → 生成令牌 │目标用户 ←──── DelegationTokenMiddleware ←──────┘ │ ▼请求以目标用户身份执行 │ ▼审计跟踪:operator_id + target_user_id组件
| 组件 | 用途 |
|---|---|
DelegationTokenService | 生成和验证模拟令牌 |
DelegationTokenMiddleware | 拦截和验证委托令牌 |
IDelegationGrantRepository | SqlSugar 支持的授权存储 |
DelegationGrantEntity | 授权记录(操作员、目标、TTL、范围) |
ICurrentUserAccessor.BeginScope() | 后台任务的运行身份份上下文 |
委托授权实体
public class DelegationGrantEntity : EntityBase{ public string OperatorId { get; set; } public string TargetUserId { get; set; } public string TenantId { get; set; } public DateTimeOffset ExpiresAt { get; set; } public string? Scope { get; set; } public bool IsRevoked { get; set; }}令牌生命周期
- 授权创建:操作员请求模拟目标用户
- 令牌生成:
DelegationTokenService创建限时令牌 - 令牌验证:
DelegationTokenMiddleware在每个请求中验证令牌 - 上下文注入:
ICurrentUser反映目标用户身份 - 审计:所有操作记录操作员和目标用户
- 过期:令牌在 TTL 后自动过期
中间件位置
ExceptionHandler → CorrelationId → Authentication → DelegationToken→ TenantResolution → Audit → Authorization → RateLimiter → Endpoints委托验证发生在认证之后但租户解析之前——操作员必须先通过认证。
安全考量
- 授权有可配置 TTL(默认 1 小时)
- 授权可立即撤销
- 范围限制操作员可执行的操作
- 所有模拟操作被审计
- 仅具有
delegation.grant权限的操作员可创建授权
当前限制
- EF Core 路径尚不支持委托(仅 SqlSugar)
- 后台任务模拟使用
BeginScope而非中间件