package models import ( "time" ) // SSOConfig SSO配置结构体 type SSOConfig struct { // SSO服务器地址 SSOServerURL string `json:"sso_server_url"` // OAuth客户端ID ClientID string `json:"client_id"` // OAuth客户端密钥 ClientSecret string `json:"client_secret"` // 重定向URI RedirectURI string `json:"redirect_uri"` // 请求作用域 Scope string `json:"scope"` // 资源受众 ResourceAud string `json:"resource_aud"` // HTTP超时时间 Timeout time.Duration `json:"timeout"` } // TokenResponse OAuth令牌响应 type TokenResponse struct { AccessToken string `json:"access_token"` IDToken string `json:"id_token"` RefreshToken string `json:"refresh_token"` TokenType string `json:"token_type"` ExpiresIn int `json:"expires_in"` } // SSOUserInfo SSO API 返回的用户信息(用于解析 SSO 响应) type SSOUserInfo struct { Sub string `json:"sub"` Name string `json:"name,omitempty"` Email string `json:"email,omitempty"` PreferredUsername string `json:"preferred_username,omitempty"` Roles interface{} `json:"roles,omitempty"` // 使用 interface{} 来接受任何类型 } // UserInfo 用户信息(用于应用程序内部) type UserInfo struct { Sub string `json:"sub"` Name string `json:"name,omitempty"` Email string `json:"email,omitempty"` PreferredUsername string `json:"preferred_username,omitempty"` Pages []Page `json:"pages,omitempty"` Roles []Role `json:"roles,omitempty"` } // OpenIDConfiguration OpenID配置 type OpenIDConfiguration struct { Issuer string `json:"issuer"` AuthorizationEndpoint string `json:"authorization_endpoint"` TokenEndpoint string `json:"token_endpoint"` UserinfoEndpoint string `json:"userinfo_endpoint"` JwksURI string `json:"jwks_uri"` ResponseTypesSupported []string `json:"response_types_supported"` SubjectTypesSupported []string `json:"subject_types_supported"` IDTokenSigningAlgValuesSupported []string `json:"id_token_signing_alg_values_supported"` CodeChallengeMethodsSupported []string `json:"code_challenge_methods_supported"` TokenEndpointAuthMethodsSupported []string `json:"token_endpoint_auth_methods_supported"` } // JWKS JSON Web Key Set type JWKS struct { Keys []map[string]interface{} `json:"keys"` } // AuthCodeRequest 授权码请求参数 type AuthCodeRequest struct { ClientID string `json:"client_id"` RedirectURI string `json:"redirect_uri"` ResponseType string `json:"response_type"` Scope string `json:"scope"` State string `json:"state"` CodeChallenge string `json:"code_challenge"` CodeChallengeMethod string `json:"code_challenge_method"` Prompt string `json:"prompt"` } // TokenRequest 令牌请求参数 type TokenRequest struct { GrantType string `json:"grant_type"` Code string `json:"code"` RedirectURI string `json:"redirect_uri"` CodeVerifier string `json:"code_verifier"` RefreshToken string `json:"refresh_token"` } // Session 用户会话信息 type Session struct { UserID string `json:"user_id"` UserInfo *UserInfo `json:"user_info"` TokenInfo *TokenResponse `json:"token_info"` ExpiresAt time.Time `json:"expires_at"` } // SSOLoginRequest SSO登录请求 type SSOLoginRequest struct { // 可以为空,用于初始化SSO登录流程 } // SSOLoginResponse SSO登录响应 type SSOLoginResponse struct { Success bool `json:"success"` Message string `json:"message"` AuthURL string `json:"auth_url"` State string `json:"state"` CodeVerifier string `json:"code_verifier"` } // SSOCallbackRequest SSO回调请求 type SSOCallbackRequest struct { Code string `json:"code" binding:"required"` State string `json:"state" binding:"required"` } // SSOCallbackResponse SSO回调响应 type SSOCallbackResponse struct { Success bool `json:"success"` Message string `json:"message"` AccessToken string `json:"access_token,omitempty"` IDToken string `json:"id_token,omitempty"` RefreshToken string `json:"refresh_token,omitempty"` ExpiresIn int `json:"expires_in,omitempty"` UserInfo *UserInfo `json:"user_info,omitempty"` UUID string `json:"uuid,omitempty"` } // RefreshTokenRequest 刷新令牌请求 type RefreshTokenRequest struct { RefreshToken string `json:"refresh_token" binding:"required"` } // RefreshTokenResponse 刷新令牌响应 type RefreshTokenResponse struct { Success bool `json:"success"` Message string `json:"message"` AccessToken string `json:"access_token,omitempty"` IDToken string `json:"id_token,omitempty"` RefreshToken string `json:"refresh_token,omitempty"` ExpiresIn int `json:"expires_in,omitempty"` } // LogoutRequest 登出请求 type LogoutRequest struct { // AccessToken字段保留用于向后兼容,但实际不再使用 AccessToken string `json:"access_token,omitempty"` } // LogoutResponse 登出响应 type LogoutResponse struct { Success bool `json:"success"` Message string `json:"message"` } // UserInfoResponse 用户信息响应 type UserInfoResponse struct { Success bool `json:"success"` Message string `json:"message"` UserInfo *UserInfo `json:"user_info,omitempty"` } // PKCEState PKCE状态信息 type PKCEState struct { BaseModel State string `gorm:"size:191;uniqueIndex;column:state" json:"state"` CodeVerifier string `gorm:"column:code_verifier" json:"code_verifier"` } func (p *PKCEState) TableName() string { return "admin_pkce_states" } // LoginInfo 用户登录信息 type LoginInfo struct { BaseModel UserID int `gorm:"column:user_id;not null" json:"user_id"` UserName string `gorm:"column:user_name;size:100;not null" json:"user_name"` Email string `gorm:"column:email;size:255;not null" json:"email"` UUID string `gorm:"column:uuid;size:100;not null" json:"uuid"` IsOnline bool `gorm:"column:is_online;default:false" json:"is_online"` } func (l *LoginInfo) TableName() string { return "admin_login_infos" } // ErrorResponse 错误响应 type ErrorResponse struct { Error string `json:"error"` Message string `json:"message"` }