feat():learning后台管理项目初始化
This commit is contained in:
196
internal/models/sso.go
Normal file
196
internal/models/sso.go
Normal file
@@ -0,0 +1,196 @@
|
||||
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"`
|
||||
}
|
||||
Reference in New Issue
Block a user