feat: manage existing credential actions with audited replay

This commit is contained in:
2026-11-01 19:10:37 +08:00
parent baa81c4923
commit 98ad60c0b8
18 changed files with 1350 additions and 53 deletions

View File

@@ -38,7 +38,7 @@ type AccessCredential struct {
PreviousValidUntil *time.Time `json:"previous_valid_until,omitempty"` // PreviousValidUntil 上一代令牌实际截止,空表示无旧令牌。
ID core.ID `json:"id"` // ID 凭据标识,重新生成 Token 时不改变。
Name string `json:"name"` // Name 凭据名称。
Revision uint64 `json:"revision,string"` // Revision 轮换的并发校验版本。
Revision uint64 `json:"revision,string"` // Revision 凭据管理变更的并发校验版本。
ExpiresAt *time.Time `json:"expires_at,omitempty"` // ExpiresAt 到期时间,空表示无固定到期时间。
RevokedAt *time.Time `json:"revoked_at,omitempty"` // RevokedAt 撤销时间,非空时禁止轮换。
Permissions auth.Permissions `json:"permissions"` // Permissions 动作和队列授权范围。
@@ -57,15 +57,16 @@ type ApplicationDetail struct {
// ApplicationInput 描述创建应用或变更凭据的管理员意图。
type ApplicationInput struct {
Kind string `json:"kind"` // Kind CREATE、ROTATE、SET_EXPIRY 或 FINALIZE。
Kind string `json:"kind"` // Kind CREATE、ROTATE、SET_EXPIRY、FINALIZE 或 SET_PERMISSIONS。
Application string `json:"application"` // Application 新应用名称,仅 CREATE 使用。
Namespace string `json:"namespace"` // Namespace 新命名空间名称,仅 CREATE 使用。
Environment string `json:"environment"` // Environment 新环境名称,仅 CREATE 使用。
Queue string `json:"queue"` // Queue 初始队列名称,仅 CREATE 使用。
Capabilities []string `json:"capabilities,omitempty"` // Capabilities 显式选择的业务权限组,仅 CREATE 使用。
NamespaceID core.ID `json:"namespace_id,omitempty"` // NamespaceID 轮换目标所属范围。
CredentialID core.ID `json:"credential_id,omitempty"` // CredentialID 轮换目标凭据。
ExpectedRevision uint64 `json:"expected_revision,string"` // ExpectedRevision 轮换时读取到的版本。
Actions []string `json:"actions,omitempty"` // Actions 仅 SET_PERMISSIONS 使用,完整替换动作集合;不改变队列授权。
NamespaceID core.ID `json:"namespace_id,omitempty"` // NamespaceID 凭据变更目标所属范围。
CredentialID core.ID `json:"credential_id,omitempty"` // CredentialID 变更目标凭据,权限修改不改变其身份。
ExpectedRevision uint64 `json:"expected_revision,string"` // ExpectedRevision 变更前读取到的凭据版本,防止覆盖并发修改。
ValidDays int `json:"valid_days"` // ValidDays 有效天数;0 为长期,1–365 为定期。
GraceDays int `json:"grace_days,omitempty"` // GraceDays ROTATE 的旧令牌过渡天数,0–30;0 显式立即失效。
Reason string `json:"reason"` // Reason 写入审计的变更原因。
@@ -74,7 +75,7 @@ type ApplicationInput struct {
// ApplicationOperation 是浏览器在提交前保存的固定操作;启用保管时仅保存 Token 密文。
// 网络结果未知时重放同一份内容,禁止重新生成操作身份或秘密。
type ApplicationOperation struct {
Version int `json:"version,omitempty"` // Version v2 支持长期令牌与过渡;旧固定操作未设置时沿用 v1。
Version int `json:"version,omitempty"` // Version v3 仅用于权限变更;v2 支持长期令牌与过渡,未设置时沿用 v1。
Input ApplicationInput `json:"input"` // Input 固定的管理员意图。
OperationID core.ID `json:"operation_id"` // OperationID 稳定幂等身份。
ApplicationID core.ID `json:"application_id"` // ApplicationID 新建或已核验的应用标识。