@@ -86,6 +86,45 @@ type UserIdentity struct {
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
}
|
||||
|
||||
// UserPasskey 是账号绑定的 WebAuthn 通行密钥;公钥非敏感,凭据整段 JSON 明文落库。
|
||||
type UserPasskey struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
UserID uint `gorm:"index" json:"-"`
|
||||
Name string `gorm:"size:64" json:"name"`
|
||||
// 凭据 ID(base64url)原文:规范允许原始 ID 达 1023 字节、编码后逾千字符,
|
||||
// 存 text 不设索引;唯一约束与登录反查走下方定长哈希列
|
||||
CredentialID string `gorm:"type:text" json:"-"`
|
||||
// 凭据 ID 的 SHA-256 hex(定长 64):唯一索引防同一验证器重复注册
|
||||
CredentialIDHash string `gorm:"size:64;uniqueIndex" json:"-"`
|
||||
// 注册时的 WebAuthn origin(scheme://host):面板地址变更后按它判定
|
||||
// 该凭据是否仍可登录(RP ID / origin 绑定注册时域名)
|
||||
Origin string `gorm:"size:255" json:"-"`
|
||||
// webauthn.Credential 完整 JSON(公钥/signCount/flags);attestation 可上 KB,
|
||||
// 显式 text 防 MySQL DefaultStringSize 截断;校验后 signCount 有更新,整段重写
|
||||
Credential string `gorm:"type:text" json:"-"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
LastUsedAt *time.Time `json:"lastUsedAt"`
|
||||
}
|
||||
|
||||
// UserSession 是一次已签发登录会话(JWT)的落地记录;
|
||||
// 「活跃」判定 = 未撤销 && 未过期 && token_ver == 账号当前版本。
|
||||
// 升级前签发的存量令牌无对应行,校验时放行(兼容),仅不可见/不可定点撤销。
|
||||
type UserSession struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
UserID uint `gorm:"index" json:"-"`
|
||||
// JWT jti;敏感变更换发时同行更新(会话接续),不产生新条目
|
||||
TokenID string `gorm:"size:64;uniqueIndex" json:"-"`
|
||||
TokenVer uint `json:"-"`
|
||||
// 登录方式:password / oidc / github / passkey / wallet;接续换发保留原值
|
||||
Method string `gorm:"size:16" json:"method"`
|
||||
ClientIP string `gorm:"size:64" json:"clientIp"`
|
||||
UserAgent string `gorm:"size:256" json:"userAgent"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
LastSeenAt time.Time `json:"lastSeenAt"`
|
||||
ExpiresAt time.Time `json:"expiresAt"`
|
||||
RevokedAt *time.Time `json:"-"`
|
||||
}
|
||||
|
||||
// 任务类型取值。
|
||||
const (
|
||||
TaskTypeHealthCheck = "health_check" // 定时测活
|
||||
|
||||
Reference in New Issue
Block a user