RefreshTokenCache 管理Refresh Token的Redis缓存 用于JWT Token刷新机制,支持Token轮转和防重放攻击 Key 格式: - refresh_token:{token_hash} -> RefreshTokenData (JSON) - user_refresh_tokens:{user_id} -> Set - token_family:{family_id} -> Set
| 27 | // - user_refresh_tokens:{user_id} -> Set<token_hash> |
| 28 | // - token_family:{family_id} -> Set<token_hash> |
| 29 | type RefreshTokenCache interface { |
| 30 | // StoreRefreshToken 存储Refresh Token |
| 31 | // tokenHash: Token的SHA256哈希值(不存储原始Token) |
| 32 | // data: Token关联的数据 |
| 33 | // ttl: Token过期时间 |
| 34 | StoreRefreshToken(ctx context.Context, tokenHash string, data *RefreshTokenData, ttl time.Duration) error |
| 35 | |
| 36 | // GetRefreshToken 获取Refresh Token数据 |
| 37 | // 返回 (data, nil) 如果Token存在 |
| 38 | // 返回 (nil, ErrRefreshTokenNotFound) 如果Token不存在 |
| 39 | // 返回 (nil, err) 如果发生其他错误 |
| 40 | GetRefreshToken(ctx context.Context, tokenHash string) (*RefreshTokenData, error) |
| 41 | |
| 42 | // DeleteRefreshToken 删除单个Refresh Token |
| 43 | // 用于Token轮转时使旧Token失效 |
| 44 | DeleteRefreshToken(ctx context.Context, tokenHash string) error |
| 45 | |
| 46 | // DeleteUserRefreshTokens 删除用户的所有Refresh Token |
| 47 | // 用于密码更改或用户主动登出所有设备 |
| 48 | DeleteUserRefreshTokens(ctx context.Context, userID int64) error |
| 49 | |
| 50 | // DeleteTokenFamily 删除整个Token家族 |
| 51 | // 用于检测到Token重放攻击时,撤销整个会话链 |
| 52 | DeleteTokenFamily(ctx context.Context, familyID string) error |
| 53 | |
| 54 | // AddToUserTokenSet 将Token添加到用户的Token集合 |
| 55 | // 用于跟踪用户的所有活跃Refresh Token |
| 56 | AddToUserTokenSet(ctx context.Context, userID int64, tokenHash string, ttl time.Duration) error |
| 57 | |
| 58 | // AddToFamilyTokenSet 将Token添加到家族Token集合 |
| 59 | // 用于跟踪同一登录会话的所有Token |
| 60 | AddToFamilyTokenSet(ctx context.Context, familyID string, tokenHash string, ttl time.Duration) error |
| 61 | |
| 62 | // GetUserTokenHashes 获取用户的所有Token哈希 |
| 63 | // 用于批量删除用户Token |
| 64 | GetUserTokenHashes(ctx context.Context, userID int64) ([]string, error) |
| 65 | |
| 66 | // GetFamilyTokenHashes 获取家族的所有Token哈希 |
| 67 | // 用于批量删除家族Token |
| 68 | GetFamilyTokenHashes(ctx context.Context, familyID string) ([]string, error) |
| 69 | |
| 70 | // IsTokenInFamily 检查Token是否属于指定家族 |
| 71 | // 用于验证Token家族关系 |
| 72 | IsTokenInFamily(ctx context.Context, familyID string, tokenHash string) (bool, error) |
| 73 | } |
no outgoing calls
no test coverage detected