175 lines
6.6 KiB
Go
175 lines
6.6 KiB
Go
// Package auth 定义 user-service 认证领域模型,不包含密码明文或三方 SDK 细节。
|
||
package auth
|
||
|
||
// PasswordAccount 是用户主动设置密码后的密码身份记录。
|
||
// 登录入口使用 user.current_display_user_id 解析用户,不再维护独立账号命名空间。
|
||
type PasswordAccount struct {
|
||
// AppCode 是账号所属 App,短号只在同一个 App 内唯一。
|
||
AppCode string
|
||
// UserID 是密码身份绑定的系统用户 ID。
|
||
UserID int64
|
||
// DisplayUserID 是登录时解析出的当前展示短号快照,不作为独立唯一账号命名空间持久化。
|
||
DisplayUserID string
|
||
// PasswordHash 保存 bcrypt 等安全 hash,永远不保存密码明文。
|
||
PasswordHash string
|
||
// HashAlg 标记 hash 算法,方便后续升级算法。
|
||
HashAlg string
|
||
// CreatedAtMs 是密码身份创建时间。
|
||
CreatedAtMs int64
|
||
// UpdatedAtMs 是密码身份更新时间。
|
||
UpdatedAtMs int64
|
||
}
|
||
|
||
// Token 表达 user-service 签发给 gateway 的登录结果。
|
||
// refresh token 原文只能出现在返回路径,持久化层必须保存 hash。
|
||
type Token struct {
|
||
// AppCode 是 access/refresh session 绑定的 App 租户键。
|
||
AppCode string
|
||
// UserID 是系统内部不可变用户 ID。
|
||
UserID int64
|
||
// DisplayUserID 是当前展示短号,可能是默认短号或有效靓号。
|
||
DisplayUserID string
|
||
// DefaultDisplayUserID 是用户永久默认短号。
|
||
DefaultDisplayUserID string
|
||
// DisplayUserIDKind 表示当前展示号来源。
|
||
DisplayUserIDKind string
|
||
// DisplayUserIDExpiresAtMs 是当前靓号过期时间,默认短号为 0。
|
||
DisplayUserIDExpiresAtMs int64
|
||
// ProfileCompleted 是 access token 中用于 gateway profile gate 的资料完成快照。
|
||
ProfileCompleted bool
|
||
// OnboardingStatus 是 access token 中用于客户端跳转的注册状态。
|
||
OnboardingStatus string
|
||
// SessionID 是服务端 refresh session 标识。
|
||
SessionID string
|
||
// AccessToken 是返回给 gateway/client 的 JWT。
|
||
AccessToken string
|
||
// RefreshToken 是一次性轮换的 refresh token 原文,只能在响应中出现。
|
||
RefreshToken string
|
||
// ExpiresInSec 是 access token 有效期秒数。
|
||
ExpiresInSec int64
|
||
// TokenType 固定为 Bearer。
|
||
TokenType string
|
||
}
|
||
|
||
// Session 表达服务端会话和 refresh token 生命周期。
|
||
type Session struct {
|
||
// AppCode 是 session 所属 App,refresh token 不能跨 App 复用。
|
||
AppCode string
|
||
// SessionID 是服务端会话主键。
|
||
SessionID string
|
||
// UserID 是会话所属用户。
|
||
UserID int64
|
||
// RefreshTokenHash 是 refresh token 的 hash,持久化层不得保存原文。
|
||
RefreshTokenHash string
|
||
// DeviceID 绑定 refresh token 轮换设备,防止跨设备复用。
|
||
DeviceID string
|
||
// ExpiresAtMs 是 refresh session 过期时间。
|
||
ExpiresAtMs int64
|
||
// RevokedAtMs 非 0 表示会话已吊销。
|
||
RevokedAtMs int64
|
||
// CreatedAtMs 是会话创建时间。
|
||
CreatedAtMs int64
|
||
// UpdatedAtMs 是会话更新时间。
|
||
UpdatedAtMs int64
|
||
}
|
||
|
||
// ThirdPartyIdentity 是 provider + subject 到用户的稳定绑定。
|
||
type ThirdPartyIdentity struct {
|
||
// AppCode 把 provider subject 限定在当前 App 内,避免多个 App 共享 provider 命名空间。
|
||
AppCode string
|
||
// UserID 是绑定到的系统用户。
|
||
UserID int64
|
||
// Provider 是三方平台标识,例如 wechat。
|
||
Provider string
|
||
// ProviderSubject 是 provider 内稳定用户标识。
|
||
ProviderSubject string
|
||
// ProviderUnionID 是 provider 可选的跨应用联合 ID。
|
||
ProviderUnionID string
|
||
// CreatedAtMs 是绑定创建时间。
|
||
CreatedAtMs int64
|
||
// UpdatedAtMs 是绑定更新时间。
|
||
UpdatedAtMs int64
|
||
}
|
||
|
||
// LoginAudit 是登录注册链路的审计记录。
|
||
// 审计不能包含密码、三方 credential 或 refresh token 原文。
|
||
type LoginAudit struct {
|
||
// AppCode 是本次认证链路所属 App。
|
||
AppCode string
|
||
// RequestID 是 gateway 透传的请求 ID,用于串联审计。
|
||
RequestID string
|
||
// UserID 是已知用户 ID,认证失败且未解析身份时可以为 0。
|
||
UserID int64
|
||
// LoginType 区分 password、third_party、refresh、logout 等链路。
|
||
LoginType string
|
||
// Provider 只在三方登录链路中有值。
|
||
Provider string
|
||
// Result 是 success 或 failed。
|
||
Result string
|
||
// FailureCode 保存稳定错误 reason,不能写敏感凭证。
|
||
FailureCode string
|
||
// ClientIP 是 gateway 观察到的客户端 IP。
|
||
ClientIP string
|
||
// UserAgent 是客户端 UA。
|
||
UserAgent string
|
||
// CreatedAtMs 是审计写入时间。
|
||
CreatedAtMs int64
|
||
}
|
||
|
||
// ThirdPartyProfile 是三方凭证校验后的稳定身份结果。
|
||
type ThirdPartyProfile struct {
|
||
// ProviderSubject 是三方平台内稳定身份。
|
||
ProviderSubject string
|
||
// ProviderUnionID 是可选联合身份。
|
||
ProviderUnionID string
|
||
}
|
||
|
||
// ThirdPartyRegistration 是三方首次注册时写入用户主表的资料和来源快照。
|
||
// 它不包含三方 credential 原文;credential 只在 verifier 中短暂使用。
|
||
type ThirdPartyRegistration struct {
|
||
// AppCode 是注册用户所属 App,必须来自 gateway 解析后的 RequestMeta。
|
||
AppCode string
|
||
// Username 是客户端提交的展示名。
|
||
Username string
|
||
// Gender 是客户端提交的性别原值,服务端不根据它推断身份。
|
||
Gender string
|
||
// Country 是客户端提交的国家码;服务端会归一并要求命中 active countries.country_code。
|
||
Country string
|
||
// RegionID 是 user-service 根据 Country 解析出的区域快照,不接受客户端直接提交。
|
||
RegionID int64
|
||
// InviteCode 是可选邀请码。
|
||
InviteCode string
|
||
// IP 是注册入口上报或 gateway 观察到的 IP。
|
||
IP string
|
||
// UserAgent 是 gateway 从 HTTP header 观察到的客户端 UA。
|
||
UserAgent string
|
||
// CountryByIP 是服务端根据入口 IP 或可信边缘地域信息得到的国家快照。
|
||
CountryByIP string
|
||
// DeviceID 是注册设备 ID,同时用于 refresh session 绑定。
|
||
DeviceID string
|
||
// Device 是客户端上报的设备型号或描述。
|
||
Device string
|
||
// OSVersion 是客户端系统版本。
|
||
OSVersion string
|
||
// Avatar 是头像 HTTP(S) URL。
|
||
Avatar string
|
||
// BirthDate 使用 yyyy-mm-dd 保存生日,不携带时区。
|
||
BirthDate string
|
||
// AppVersion 是注册客户端版本。
|
||
AppVersion string
|
||
// BuildNumber 是注册客户端构建号,比 app_version 更适合定位精确包。
|
||
BuildNumber string
|
||
// Source 是注册来源渠道。
|
||
Source string
|
||
// InstallChannel 是安装渠道,例如 play_store 或 app_store。
|
||
InstallChannel string
|
||
// Campaign 是投放活动标识。
|
||
Campaign string
|
||
// Platform 是客户端平台,当前支持 android 或 ios。
|
||
Platform string
|
||
// Language 是客户端语言偏好。
|
||
Language string
|
||
// Timezone 是客户端 IANA 时区,例如 America/Los_Angeles。
|
||
Timezone string
|
||
}
|