Documentation
¶
Index ¶
- Constants
- type BaseSocialProvider
- type CreateUserCallback
- type GitHubProvider
- type GoogleProvider
- type JWTConfig
- type JWTProvider
- func (p *JWTProvider) Authenticate(ctx context.Context, credentials map[string]string) (auth.Authenticatable, error)
- func (p *JWTProvider) CheckPermission(ctx context.Context, user auth.Authenticatable, permission string) bool
- func (p *JWTProvider) CheckRole(ctx context.Context, user auth.Authenticatable, role string) bool
- func (p *JWTProvider) ConfigureJWT(config middleware.JWTConfig)
- func (p *JWTProvider) GenerateToken(ctx context.Context, user auth.Authenticatable, expiry time.Duration) (string, error)
- func (p *JWTProvider) GetUserByID(ctx context.Context, id string) (auth.Authenticatable, error)
- func (p *JWTProvider) InvalidateToken(ctx context.Context, tokenString string) error
- func (p *JWTProvider) RefreshToken(ctx context.Context, tokenString string) (string, error)
- func (p *JWTProvider) SetBlacklist(blacklist TokenBlacklist)
- func (p *JWTProvider) ToMiddleware() flow.HandlerFunc
- func (p *JWTProvider) ValidateToken(ctx context.Context, tokenString string) (auth.Authenticatable, error)
- type MemoryBlacklist
- type MemorySessionStorage
- func (s *MemorySessionStorage) Delete(id string) error
- func (s *MemorySessionStorage) Exists(id string) bool
- func (s *MemorySessionStorage) Get(id string) ([]byte, error)
- func (s *MemorySessionStorage) Set(id string, data []byte, expiry time.Duration) error
- func (s *MemorySessionStorage) Touch(id string, expiry time.Duration) error
- type OAuth2Config
- type OAuth2Provider
- func (p *OAuth2Provider) Authenticate(ctx context.Context, credentials map[string]string) (auth.Authenticatable, error)
- func (p *OAuth2Provider) AuthenticateWithCode(ctx context.Context, code string) (auth.Authenticatable, string, error)
- func (p *OAuth2Provider) CheckPermission(ctx context.Context, user auth.Authenticatable, permission string) bool
- func (p *OAuth2Provider) CheckRole(ctx context.Context, user auth.Authenticatable, role string) bool
- func (p *OAuth2Provider) ExchangeCode(code string) (*OAuth2Token, error)
- func (p *OAuth2Provider) GenerateToken(ctx context.Context, user auth.Authenticatable, expiry time.Duration) (string, error)
- func (p *OAuth2Provider) GetAuthURL(state string) string
- func (p *OAuth2Provider) GetUserByID(ctx context.Context, id string) (auth.Authenticatable, error)
- func (p *OAuth2Provider) GetUserInfo(token *OAuth2Token) (map[string]interface{}, error)
- func (p *OAuth2Provider) HandleCallback() flow.HandlerFunc
- func (p *OAuth2Provider) InvalidateToken(ctx context.Context, tokenString string) error
- func (p *OAuth2Provider) RefreshToken(ctx context.Context, tokenString string) (string, error)
- func (p *OAuth2Provider) ValidateToken(ctx context.Context, tokenString string) (auth.Authenticatable, error)
- type OAuth2Token
- type SessionConfig
- type SessionProvider
- func (p *SessionProvider) Authenticate(ctx context.Context, credentials map[string]string) (auth.Authenticatable, error)
- func (p *SessionProvider) CheckPermission(ctx context.Context, user auth.Authenticatable, permission string) bool
- func (p *SessionProvider) CheckRole(ctx context.Context, user auth.Authenticatable, role string) bool
- func (p *SessionProvider) ConfigureSession(config SessionConfig)
- func (p *SessionProvider) GenerateToken(ctx context.Context, user auth.Authenticatable, expiry time.Duration) (string, error)
- func (p *SessionProvider) GetUserByID(ctx context.Context, id string) (auth.Authenticatable, error)
- func (p *SessionProvider) InvalidateToken(ctx context.Context, token string) error
- func (p *SessionProvider) RefreshToken(ctx context.Context, token string) (string, error)
- func (p *SessionProvider) ToMiddleware() flow.HandlerFunc
- func (p *SessionProvider) ValidateToken(ctx context.Context, token string) (auth.Authenticatable, error)
- type SessionStorage
- type SocialManager
- type SocialProvider
- type SocialUser
- type Token
- type TokenBlacklist
- type UserRepository
- type WeChatProvider
Constants ¶
const ( ProviderGitHub = "github" ProviderGoogle = "google" ProviderWeChat = "wechat" )
社交登录提供商类型常量
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BaseSocialProvider ¶
type BaseSocialProvider struct {
// contains filtered or unexported fields
}
BaseSocialProvider 是社交登录提供商的基础实现
func (*BaseSocialProvider) ExchangeToken ¶
ExchangeToken 使用授权码交换访问令牌
func (*BaseSocialProvider) GetAuthURL ¶
func (p *BaseSocialProvider) GetAuthURL(state string) string
GetAuthURL 返回授权URL
type CreateUserCallback ¶
type CreateUserCallback func(ctx context.Context, user *SocialUser) (interface{}, error)
CreateUserCallback 是创建用户的回调函数类型
type GitHubProvider ¶
type GitHubProvider struct {
BaseSocialProvider
}
GitHubProvider 实现GitHub登录
func NewGitHubProvider ¶
func NewGitHubProvider(config map[string]interface{}) *GitHubProvider
NewGitHubProvider 创建新的GitHub登录提供商
func (*GitHubProvider) GetUserInfo ¶
func (p *GitHubProvider) GetUserInfo(ctx context.Context, token *Token) (*SocialUser, error)
GetUserInfo 从GitHub获取用户信息
type GoogleProvider ¶
type GoogleProvider struct {
BaseSocialProvider
}
GoogleProvider 实现Google登录
func NewGoogleProvider ¶
func NewGoogleProvider(config map[string]interface{}) *GoogleProvider
NewGoogleProvider 创建新的Google登录提供商
func (*GoogleProvider) GetUserInfo ¶
func (p *GoogleProvider) GetUserInfo(ctx context.Context, token *Token) (*SocialUser, error)
GetUserInfo 从Google获取用户信息
type JWTConfig ¶
type JWTConfig struct {
// SigningKey 签名密钥
SigningKey []byte
// SigningMethod 签名方法
SigningMethod jwt.SigningMethod
// Issuer 令牌发行者
Issuer string
// Audience 目标接收者
Audience []string
// DefaultExpiry 默认过期时间
DefaultExpiry time.Duration
// RefreshExpiry 刷新令牌过期时间
RefreshExpiry time.Duration
}
JWTConfig JWT配置
type JWTProvider ¶
type JWTProvider struct {
// contains filtered or unexported fields
}
JWTProvider 是基于JWT的认证提供者实现
func NewJWTProvider ¶
func NewJWTProvider(userProvider auth.UserProvider, signingKey interface{}, method jwt.SigningMethod) *JWTProvider
NewJWTProvider 创建新的JWT认证提供者
func (*JWTProvider) Authenticate ¶
func (p *JWTProvider) Authenticate(ctx context.Context, credentials map[string]string) (auth.Authenticatable, error)
Authenticate 验证用户凭证并返回已认证用户
func (*JWTProvider) CheckPermission ¶
func (p *JWTProvider) CheckPermission(ctx context.Context, user auth.Authenticatable, permission string) bool
CheckPermission 检查用户是否拥有指定权限
func (*JWTProvider) CheckRole ¶
func (p *JWTProvider) CheckRole(ctx context.Context, user auth.Authenticatable, role string) bool
CheckRole 检查用户是否拥有指定角色
func (*JWTProvider) ConfigureJWT ¶
func (p *JWTProvider) ConfigureJWT(config middleware.JWTConfig)
ConfigureJWT 配置JWT提供者
func (*JWTProvider) GenerateToken ¶
func (p *JWTProvider) GenerateToken(ctx context.Context, user auth.Authenticatable, expiry time.Duration) (string, error)
GenerateToken 为用户生成JWT令牌
func (*JWTProvider) GetUserByID ¶
func (p *JWTProvider) GetUserByID(ctx context.Context, id string) (auth.Authenticatable, error)
GetUserByID 通过ID获取用户
func (*JWTProvider) InvalidateToken ¶
func (p *JWTProvider) InvalidateToken(ctx context.Context, tokenString string) error
InvalidateToken 使JWT令牌失效
func (*JWTProvider) RefreshToken ¶
RefreshToken 刷新JWT令牌
func (*JWTProvider) SetBlacklist ¶
func (p *JWTProvider) SetBlacklist(blacklist TokenBlacklist)
SetBlacklist 设置令牌黑名单
func (*JWTProvider) ToMiddleware ¶
func (p *JWTProvider) ToMiddleware() flow.HandlerFunc
ToMiddleware 将JWT提供者转换为Flow中间件
func (*JWTProvider) ValidateToken ¶
func (p *JWTProvider) ValidateToken(ctx context.Context, tokenString string) (auth.Authenticatable, error)
ValidateToken 验证JWT令牌并返回关联的用户
type MemoryBlacklist ¶
type MemoryBlacklist struct {
// contains filtered or unexported fields
}
MemoryBlacklist 是基于内存的令牌黑名单实现
func (*MemoryBlacklist) Add ¶
func (m *MemoryBlacklist) Add(token string, expiry time.Time) error
Add 将令牌添加到黑名单
func (*MemoryBlacklist) Contains ¶
func (m *MemoryBlacklist) Contains(token string) bool
Contains 检查令牌是否在黑名单中
type MemorySessionStorage ¶
type MemorySessionStorage struct {
// contains filtered or unexported fields
}
MemorySessionStorage 内存会话存储实现
func NewMemorySessionStorage ¶
func NewMemorySessionStorage() *MemorySessionStorage
NewMemorySessionStorage 创建新的内存会话存储
func (*MemorySessionStorage) Delete ¶
func (s *MemorySessionStorage) Delete(id string) error
Delete 删除会话
func (*MemorySessionStorage) Exists ¶
func (s *MemorySessionStorage) Exists(id string) bool
Exists 检查会话是否存在
func (*MemorySessionStorage) Get ¶
func (s *MemorySessionStorage) Get(id string) ([]byte, error)
Get 获取会话数据
type OAuth2Config ¶
type OAuth2Config struct {
// ClientID 客户端ID
ClientID string
// ClientSecret 客户端密钥
ClientSecret string
// RedirectURI 重定向URI
RedirectURI string
// AuthURL 授权URL
AuthURL string
// TokenURL 令牌URL
TokenURL string
// UserInfoURL 用户信息URL
UserInfoURL string
// Scopes 请求的作用域
Scopes []string
// ResponseType 响应类型,默认为"code"
ResponseType string
// StateParam 状态参数,用于防止CSRF攻击
StateParam string
}
OAuth2Config OAuth2配置
type OAuth2Provider ¶
type OAuth2Provider struct {
// contains filtered or unexported fields
}
OAuth2Provider OAuth2认证提供者
func NewOAuth2Provider ¶
func NewOAuth2Provider(userProvider auth.UserProvider, config OAuth2Config) *OAuth2Provider
NewOAuth2Provider 创建新的OAuth2认证提供者
func (*OAuth2Provider) Authenticate ¶
func (p *OAuth2Provider) Authenticate(ctx context.Context, credentials map[string]string) (auth.Authenticatable, error)
Authenticate 验证用户凭证并返回已认证用户
func (*OAuth2Provider) AuthenticateWithCode ¶
func (p *OAuth2Provider) AuthenticateWithCode(ctx context.Context, code string) (auth.Authenticatable, string, error)
AuthenticateWithCode 使用授权码认证
func (*OAuth2Provider) CheckPermission ¶
func (p *OAuth2Provider) CheckPermission(ctx context.Context, user auth.Authenticatable, permission string) bool
CheckPermission 检查用户是否拥有指定权限
func (*OAuth2Provider) CheckRole ¶
func (p *OAuth2Provider) CheckRole(ctx context.Context, user auth.Authenticatable, role string) bool
CheckRole 检查用户是否拥有指定角色
func (*OAuth2Provider) ExchangeCode ¶
func (p *OAuth2Provider) ExchangeCode(code string) (*OAuth2Token, error)
ExchangeCode 通过授权码交换访问令牌
func (*OAuth2Provider) GenerateToken ¶
func (p *OAuth2Provider) GenerateToken(ctx context.Context, user auth.Authenticatable, expiry time.Duration) (string, error)
GenerateToken 为用户生成认证令牌
func (*OAuth2Provider) GetAuthURL ¶
func (p *OAuth2Provider) GetAuthURL(state string) string
GetAuthURL 获取授权URL
func (*OAuth2Provider) GetUserByID ¶
func (p *OAuth2Provider) GetUserByID(ctx context.Context, id string) (auth.Authenticatable, error)
GetUserByID 通过ID获取用户
func (*OAuth2Provider) GetUserInfo ¶
func (p *OAuth2Provider) GetUserInfo(token *OAuth2Token) (map[string]interface{}, error)
GetUserInfo 获取用户信息
func (*OAuth2Provider) HandleCallback ¶
func (p *OAuth2Provider) HandleCallback() flow.HandlerFunc
HandleCallback 处理OAuth2回调
func (*OAuth2Provider) InvalidateToken ¶
func (p *OAuth2Provider) InvalidateToken(ctx context.Context, tokenString string) error
InvalidateToken 使令牌失效
func (*OAuth2Provider) RefreshToken ¶
RefreshToken 刷新认证令牌
func (*OAuth2Provider) ValidateToken ¶
func (p *OAuth2Provider) ValidateToken(ctx context.Context, tokenString string) (auth.Authenticatable, error)
ValidateToken 验证令牌并返回关联的用户
type OAuth2Token ¶
type OAuth2Token struct {
// AccessToken 访问令牌
AccessToken string `json:"access_token"`
// RefreshToken 刷新令牌
RefreshToken string `json:"refresh_token"`
// TokenType 令牌类型
TokenType string `json:"token_type"`
// ExpiresIn 过期时间(秒)
ExpiresIn int64 `json:"expires_in"`
// CreatedAt 创建时间
CreatedAt time.Time `json:"-"`
}
OAuth2Token OAuth2令牌
type SessionConfig ¶
type SessionConfig struct {
// CookieName 会话Cookie名称
CookieName string
// CookiePath Cookie路径
CookiePath string
// CookieDomain Cookie域
CookieDomain string
// CookieSecure 是否仅通过HTTPS发送
CookieSecure bool
// CookieHTTPOnly 是否仅可通过HTTP访问
CookieHTTPOnly bool
// DefaultExpiry 默认过期时间
DefaultExpiry time.Duration
// SameSite Cookie的SameSite属性
SameSite http.SameSite
}
SessionConfig 会话配置
type SessionProvider ¶
type SessionProvider struct {
// contains filtered or unexported fields
}
SessionProvider 会话认证提供者
func NewSessionProvider ¶
func NewSessionProvider(userProvider auth.UserProvider, storage SessionStorage) *SessionProvider
NewSessionProvider 创建新的会话认证提供者
func (*SessionProvider) Authenticate ¶
func (p *SessionProvider) Authenticate(ctx context.Context, credentials map[string]string) (auth.Authenticatable, error)
Authenticate 验证用户凭证并返回已认证用户
func (*SessionProvider) CheckPermission ¶
func (p *SessionProvider) CheckPermission(ctx context.Context, user auth.Authenticatable, permission string) bool
CheckPermission 检查用户是否拥有指定权限
func (*SessionProvider) CheckRole ¶
func (p *SessionProvider) CheckRole(ctx context.Context, user auth.Authenticatable, role string) bool
CheckRole 检查用户是否拥有指定角色
func (*SessionProvider) ConfigureSession ¶
func (p *SessionProvider) ConfigureSession(config SessionConfig)
ConfigureSession 配置会话提供者
func (*SessionProvider) GenerateToken ¶
func (p *SessionProvider) GenerateToken(ctx context.Context, user auth.Authenticatable, expiry time.Duration) (string, error)
GenerateToken 为用户生成会话令牌并存储会话数据
func (*SessionProvider) GetUserByID ¶
func (p *SessionProvider) GetUserByID(ctx context.Context, id string) (auth.Authenticatable, error)
GetUserByID 通过ID获取用户
func (*SessionProvider) InvalidateToken ¶
func (p *SessionProvider) InvalidateToken(ctx context.Context, token string) error
InvalidateToken 使会话令牌失效
func (*SessionProvider) RefreshToken ¶
RefreshToken 刷新会话令牌
func (*SessionProvider) ToMiddleware ¶
func (p *SessionProvider) ToMiddleware() flow.HandlerFunc
ToMiddleware 将会话提供者转换为Flow中间件
func (*SessionProvider) ValidateToken ¶
func (p *SessionProvider) ValidateToken(ctx context.Context, token string) (auth.Authenticatable, error)
ValidateToken 验证会话令牌并返回关联的用户
type SessionStorage ¶
type SessionStorage interface {
// Get 获取会话数据
Get(id string) ([]byte, error)
// Set 设置会话数据
Set(id string, data []byte, expiry time.Duration) error
// Delete 删除会话
Delete(id string) error
// Exists 检查会话是否存在
Exists(id string) bool
// Touch 刷新会话过期时间
Touch(id string, expiry time.Duration) error
}
SessionStorage 定义会话存储接口
type SocialManager ¶
type SocialManager struct {
// contains filtered or unexported fields
}
SocialManager 管理社交登录
func NewSocialManager ¶
func NewSocialManager(userRepo UserRepository) *SocialManager
NewSocialManager 创建新的社交登录管理器
func (*SocialManager) HandleCallback ¶
func (m *SocialManager) HandleCallback(providerName string) http.HandlerFunc
HandleCallback 处理回调请求
func (*SocialManager) HandleLogin ¶
func (m *SocialManager) HandleLogin(providerName string) http.HandlerFunc
HandleLogin 处理登录请求
func (*SocialManager) RegisterProvider ¶
func (m *SocialManager) RegisterProvider(provider SocialProvider)
RegisterProvider 注册社交登录提供商
func (*SocialManager) SetCreateUserCallback ¶
func (m *SocialManager) SetCreateUserCallback(callback CreateUserCallback)
SetCreateUserCallback 设置创建用户的回调函数
type SocialProvider ¶
type SocialProvider interface {
// GetName 返回提供商名称
GetName() string
// GetAuthURL 返回授权URL
GetAuthURL(state string) string
// ExchangeToken 使用授权码交换访问令牌
ExchangeToken(ctx context.Context, code string) (*Token, error)
// GetUserInfo 通过访问令牌获取用户信息
GetUserInfo(ctx context.Context, token *Token) (*SocialUser, error)
}
SocialProvider 定义了社交登录提供商接口
type SocialUser ¶
type SocialUser struct {
ID string
Name string
Email string
Avatar string
Provider string
RawData map[string]interface{}
}
SocialUser 表示从社交平台获取的用户信息
type Token ¶
type Token struct {
AccessToken string
TokenType string
RefreshToken string
Expiry time.Time
Raw map[string]interface{}
}
Token 表示OAuth2认证令牌
type TokenBlacklist ¶
type TokenBlacklist interface {
// Add 将令牌添加到黑名单
Add(token string, expiry time.Time) error
// Contains 检查令牌是否在黑名单中
Contains(token string) bool
// Cleanup 清理已过期的令牌
Cleanup()
}
TokenBlacklist 定义令牌黑名单接口
type UserRepository ¶
type UserRepository interface {
// FindUserBySocialID 通过社交ID查找用户
FindUserBySocialID(ctx context.Context, provider, socialID string) (interface{}, error)
// CreateUser 创建新用户
CreateUser(ctx context.Context, user interface{}) error
}
UserRepository 定义了查找和创建用户的接口
type WeChatProvider ¶
type WeChatProvider struct {
BaseSocialProvider
}
WeChatProvider 实现微信登录
func NewWeChatProvider ¶
func NewWeChatProvider(config map[string]interface{}) *WeChatProvider
NewWeChatProvider 创建新的微信登录提供商
func (*WeChatProvider) ExchangeToken ¶
ExchangeToken 交换微信访问令牌
func (*WeChatProvider) GetAuthURL ¶
func (p *WeChatProvider) GetAuthURL(state string) string
GetAuthURL 返回微信授权URL
func (*WeChatProvider) GetUserInfo ¶
func (p *WeChatProvider) GetUserInfo(ctx context.Context, token *Token) (*SocialUser, error)
GetUserInfo 获取微信用户信息