Documentation
¶
Index ¶
- Variables
- func HTTPMiddleware(auth *AuthMiddleware) func(http.Handler) http.Handler
- func IsAuthError(err error) bool
- func IsGRPCAuthError(err error) bool
- func OptionalAuth(auth *AuthMiddleware) func(http.Handler) http.Handler
- func OptionalGRPCAuth(auth *AuthMiddleware) grpc.UnaryServerInterceptor
- func RequireAuth(auth *AuthMiddleware) func(http.Handler) http.Handler
- func RequireGRPCAuth(auth *AuthMiddleware) grpc.UnaryServerInterceptor
- func RequireRole(roles ...string) func(http.Handler) http.Handler
- func StreamClientInterceptor(auth *AuthMiddleware) grpc.StreamClientInterceptor
- func StreamServerInterceptor(auth *AuthMiddleware) grpc.StreamServerInterceptor
- func UnaryClientInterceptor(auth *AuthMiddleware) grpc.UnaryClientInterceptor
- func UnaryServerInterceptor(auth *AuthMiddleware) grpc.UnaryServerInterceptor
- func WithUser(ctx context.Context, user User) context.Context
- type AuthMiddleware
- func (am *AuthMiddleware) Authenticate(ctx context.Context, metadata map[string]any) (User, error)
- func (am *AuthMiddleware) Authorize(ctx context.Context, user User, resource, action string) error
- func (am *AuthMiddleware) Name() string
- func (am *AuthMiddleware) ResetStats()
- func (am *AuthMiddleware) ShouldSkip(path string) bool
- func (am *AuthMiddleware) Stats() Stats
- func (am *AuthMiddleware) String() string
- func (am *AuthMiddleware) SuccessRate() float64
- type Authenticator
- type Authorizer
- type CallbackAuthenticator
- type CallbackAuthorizer
- type ChainAuthenticator
- type CompositeAuthorizer
- type Config
- type CookieTokenExtractor
- type DefaultUser
- type GRPCMetadataExtractor
- type HeaderTokenExtractor
- type JWTClaims
- type MultiTokenExtractor
- type PathBasedAuthorizer
- func (a *PathBasedAuthorizer) AddProtectedPath(pathPattern string, roles []string, methods ...string)
- func (a *PathBasedAuthorizer) AddPublicPath(pathPattern string, methods ...string)
- func (a *PathBasedAuthorizer) AddRule(rule PathRule)
- func (a *PathBasedAuthorizer) Authorize(ctx context.Context, user User, resource, action string) error
- type PathRule
- type PermissiveAuthorizer
- type QueryTokenExtractor
- type RestrictiveAuthorizer
- type RoleBasedAuthorizer
- type SimpleJWTAuthenticator
- type StaticTokenAuthenticator
- type Stats
- type TokenExtractor
- type TrustedHeaderAuthenticator
- type User
Constants ¶
This section is empty.
Variables ¶
Functions ¶
func HTTPMiddleware ¶
func HTTPMiddleware(auth *AuthMiddleware) func(http.Handler) http.Handler
HTTPMiddleware 返回 HTTP 认证中间件
func OptionalAuth ¶
func OptionalAuth(auth *AuthMiddleware) func(http.Handler) http.Handler
OptionalAuth 创建可选认证中间件(认证失败不会阻止请求)
func OptionalGRPCAuth ¶
func OptionalGRPCAuth(auth *AuthMiddleware) grpc.UnaryServerInterceptor
OptionalGRPCAuth 创建可选认证的 gRPC 拦截器(认证失败不会阻止请求)
func RequireAuth ¶
func RequireAuth(auth *AuthMiddleware) func(http.Handler) http.Handler
RequireAuth 创建需要认证的中间件(用于特定路由)
func RequireGRPCAuth ¶
func RequireGRPCAuth(auth *AuthMiddleware) grpc.UnaryServerInterceptor
RequireGRPCAuth 创建需要认证的 gRPC 拦截器
func RequireRole ¶
RequireRole 创建需要特定角色的中间件
func StreamClientInterceptor ¶
func StreamClientInterceptor(auth *AuthMiddleware) grpc.StreamClientInterceptor
StreamClientInterceptor 返回一个 gRPC 流客户端拦截器,用于认证
func StreamServerInterceptor ¶
func StreamServerInterceptor(auth *AuthMiddleware) grpc.StreamServerInterceptor
StreamServerInterceptor 返回一个 gRPC 流服务器拦截器,用于认证
func UnaryClientInterceptor ¶
func UnaryClientInterceptor(auth *AuthMiddleware) grpc.UnaryClientInterceptor
UnaryClientInterceptor 返回一个 gRPC 一元客户端拦截器,用于认证
func UnaryServerInterceptor ¶
func UnaryServerInterceptor(auth *AuthMiddleware) grpc.UnaryServerInterceptor
UnaryServerInterceptor 返回一个 gRPC 一元服务器拦截器,用于认证
Types ¶
type AuthMiddleware ¶
type AuthMiddleware struct {
// contains filtered or unexported fields
}
AuthMiddleware 认证中间件
func NewAuthMiddleware ¶
func NewAuthMiddleware(config Config) *AuthMiddleware
NewAuthMiddleware 创建认证中间件
func (*AuthMiddleware) Authenticate ¶
Authenticate 执行认证
func (*AuthMiddleware) ShouldSkip ¶
func (am *AuthMiddleware) ShouldSkip(path string) bool
ShouldSkip 检查是否应该跳过认证
func (*AuthMiddleware) SuccessRate ¶
func (am *AuthMiddleware) SuccessRate() float64
SuccessRate 返回认证成功率
type Authenticator ¶
type Authenticator interface {
// Authenticate 认证令牌并返回用户信息
Authenticate(ctx context.Context, token string) (User, error)
}
Authenticator 认证器接口
type Authorizer ¶
type Authorizer interface {
// Authorize 检查用户是否有权限访问资源
Authorize(ctx context.Context, user User, resource string, action string) error
}
Authorizer 授权器接口
type CallbackAuthenticator ¶
type CallbackAuthenticator struct {
AuthFunc func(ctx context.Context, token string) (User, error)
}
CallbackAuthenticator 回调认证器(允许业务方自定义认证逻辑)
func NewCallbackAuthenticator ¶
func NewCallbackAuthenticator(authFunc func(ctx context.Context, token string) (User, error)) *CallbackAuthenticator
NewCallbackAuthenticator 创建回调认证器
func (*CallbackAuthenticator) Authenticate ¶
Authenticate 执行认证回调
type CallbackAuthorizer ¶
type CallbackAuthorizer struct {
AuthorizeFunc func(ctx context.Context, user User, resource, action string) error
}
CallbackAuthorizer 回调授权器(允许业务方自定义授权逻辑)
func NewCallbackAuthorizer ¶
func NewCallbackAuthorizer(authorizeFunc func(ctx context.Context, user User, resource, action string) error) *CallbackAuthorizer
NewCallbackAuthorizer 创建回调授权器
type ChainAuthenticator ¶
type ChainAuthenticator struct {
Authenticators []Authenticator
}
ChainAuthenticator 链式认证器(按顺序尝试多个认证器)
func NewChainAuthenticator ¶
func NewChainAuthenticator(authenticators ...Authenticator) *ChainAuthenticator
NewChainAuthenticator 创建链式认证器
func (*ChainAuthenticator) Authenticate ¶
Authenticate 按顺序尝试多个认证器
type CompositeAuthorizer ¶
type CompositeAuthorizer struct {
Authorizers []Authorizer
}
CompositeAuthorizer 组合授权器(需要所有授权器都通过)
func NewCompositeAuthorizer ¶
func NewCompositeAuthorizer(authorizers ...Authorizer) *CompositeAuthorizer
NewCompositeAuthorizer 创建组合授权器
type Config ¶
type Config struct {
// Name 认证器名称
Name string
// TokenExtractor 令牌提取器
TokenExtractor TokenExtractor
// Authenticator 认证器
Authenticator Authenticator
// Authorizer 授权器(可选)
Authorizer Authorizer
// SkipPaths 跳过认证的路径列表
SkipPaths []string
// EnableMetrics 是否启用指标统计
EnableMetrics bool
// OnAuthSuccess 认证成功回调(同步调用,须轻量,不得阻塞)
OnAuthSuccess func(ctx context.Context, user User)
// OnAuthFailure 认证失败回调(同步调用,须轻量,不得阻塞)
OnAuthFailure func(ctx context.Context, err error)
}
Config 认证配置
type CookieTokenExtractor ¶
type CookieTokenExtractor struct {
CookieName string // Cookie 名称
}
CookieTokenExtractor Cookie 令牌提取器
func NewCookieTokenExtractor ¶
func NewCookieTokenExtractor(cookieName string) *CookieTokenExtractor
NewCookieTokenExtractor 创建 Cookie 令牌提取器
type DefaultUser ¶
type DefaultUser struct {
// contains filtered or unexported fields
}
DefaultUser 默认用户实现
func NewUser ¶
func NewUser(id, name string, roles []string) *DefaultUser
func (*DefaultUser) HasRole ¶
func (u *DefaultUser) HasRole(role string) bool
func (*DefaultUser) ID ¶
func (u *DefaultUser) ID() string
func (*DefaultUser) Metadata ¶
func (u *DefaultUser) Metadata() map[string]any
func (*DefaultUser) Name ¶
func (u *DefaultUser) Name() string
func (*DefaultUser) Roles ¶
func (u *DefaultUser) Roles() []string
func (*DefaultUser) SetMetadata ¶
func (u *DefaultUser) SetMetadata(key string, value any)
type GRPCMetadataExtractor ¶
type GRPCMetadataExtractor struct {
MetadataKey string // gRPC metadata 键名
}
gRPC Metadata 令牌提取器
func NewGRPCMetadataExtractor ¶
func NewGRPCMetadataExtractor(metadataKey string) *GRPCMetadataExtractor
NewGRPCMetadataExtractor 创建 gRPC metadata 令牌提取器
type HeaderTokenExtractor ¶
type HeaderTokenExtractor struct {
HeaderName string // Header 名称,如 "Authorization"
Prefix string // 令牌前缀,如 "Bearer "
}
HeaderTokenExtractor HTTP Header 令牌提取器
func NewHeaderTokenExtractor ¶
func NewHeaderTokenExtractor(headerName, prefix string) *HeaderTokenExtractor
NewHeaderTokenExtractor 创建 Header 令牌提取器
type JWTClaims ¶
type JWTClaims struct {
UserID string `json:"user_id"`
Username string `json:"username"`
Roles []string `json:"roles"`
IssuedAt time.Time `json:"iat"`
ExpiresAt time.Time `json:"exp"`
}
JWTClaims JWT 声明
type MultiTokenExtractor ¶
type MultiTokenExtractor struct {
Extractors []TokenExtractor
}
MultiTokenExtractor 多源令牌提取器(按优先级尝试多个提取器)
func NewMultiTokenExtractor ¶
func NewMultiTokenExtractor(extractors ...TokenExtractor) *MultiTokenExtractor
NewMultiTokenExtractor 创建多源令牌提取器
type PathBasedAuthorizer ¶
type PathBasedAuthorizer struct {
// contains filtered or unexported fields
}
PathBasedAuthorizer 基于路径的授权器
func NewPathBasedAuthorizer ¶
func NewPathBasedAuthorizer() *PathBasedAuthorizer
NewPathBasedAuthorizer 创建基于路径的授权器
func (*PathBasedAuthorizer) AddProtectedPath ¶
func (a *PathBasedAuthorizer) AddProtectedPath(pathPattern string, roles []string, methods ...string)
AddProtectedPath 添加受保护路径
func (*PathBasedAuthorizer) AddPublicPath ¶
func (a *PathBasedAuthorizer) AddPublicPath(pathPattern string, methods ...string)
AddPublicPath 添加公开路径(无需认证)
func (*PathBasedAuthorizer) AddRule ¶
func (a *PathBasedAuthorizer) AddRule(rule PathRule)
AddRule 添加路径规则
type PathRule ¶
type PathRule struct {
PathPattern string // 路径模式,支持通配符
Methods []string // HTTP 方法列表,空表示所有方法
Roles []string // 允许的角色列表
AllowAll bool // 是否允许所有用户
}
PathRule 路径规则
type PermissiveAuthorizer ¶
type PermissiveAuthorizer struct{}
PermissiveAuthorizer 宽松授权器(总是允许)
func NewPermissiveAuthorizer ¶
func NewPermissiveAuthorizer() *PermissiveAuthorizer
NewPermissiveAuthorizer 创建宽松授权器
type QueryTokenExtractor ¶
type QueryTokenExtractor struct {
ParamName string // 查询参数名称,如 "token"
}
QueryTokenExtractor URL 查询参数令牌提取器
func NewQueryTokenExtractor ¶
func NewQueryTokenExtractor(paramName string) *QueryTokenExtractor
NewQueryTokenExtractor 创建查询参数令牌提取器
type RestrictiveAuthorizer ¶
type RestrictiveAuthorizer struct{}
RestrictiveAuthorizer 严格授权器(总是拒绝)
func NewRestrictiveAuthorizer ¶
func NewRestrictiveAuthorizer() *RestrictiveAuthorizer
NewRestrictiveAuthorizer 创建严格授权器
type RoleBasedAuthorizer ¶
type RoleBasedAuthorizer struct {
// contains filtered or unexported fields
}
RoleBasedAuthorizer 基于角色的授权器
func NewRoleBasedAuthorizer ¶
func NewRoleBasedAuthorizer() *RoleBasedAuthorizer
NewRoleBasedAuthorizer 创建基于角色的授权器
func (*RoleBasedAuthorizer) AddPermission ¶
func (a *RoleBasedAuthorizer) AddPermission(resource, action string, roles ...string)
AddPermission 添加权限规则
func (*RoleBasedAuthorizer) Authorize ¶
func (a *RoleBasedAuthorizer) Authorize(ctx context.Context, user User, resource, action string) error
Authorize 检查用户是否有权限
func (*RoleBasedAuthorizer) RemovePermission ¶
func (a *RoleBasedAuthorizer) RemovePermission(resource, action string)
RemovePermission 移除权限规则
type SimpleJWTAuthenticator ¶
type SimpleJWTAuthenticator struct {
// contains filtered or unexported fields
}
SimpleJWTAuthenticator 简单的 JWT 认证器(仅用于演示,生产环境建议使用专业的 JWT 库)
func NewSimpleJWTAuthenticator ¶
func NewSimpleJWTAuthenticator(secretKey string) *SimpleJWTAuthenticator
NewSimpleJWTAuthenticator 创建简单 JWT 认证器
func (*SimpleJWTAuthenticator) Authenticate ¶
Authenticate 认证 JWT 令牌
func (*SimpleJWTAuthenticator) CreateToken ¶
func (a *SimpleJWTAuthenticator) CreateToken(userID, username string, roles []string, duration time.Duration) (string, error)
CreateToken 创建 JWT 令牌(用于测试)
type StaticTokenAuthenticator ¶
type StaticTokenAuthenticator struct {
// contains filtered or unexported fields
}
StaticTokenAuthenticator 静态令牌认证器(用于测试和简单场景)
func NewStaticTokenAuthenticator ¶
func NewStaticTokenAuthenticator() *StaticTokenAuthenticator
NewStaticTokenAuthenticator 创建静态令牌认证器
func (*StaticTokenAuthenticator) AddToken ¶
func (a *StaticTokenAuthenticator) AddToken(token string, user User)
AddToken 添加令牌和对应的用户
func (*StaticTokenAuthenticator) Authenticate ¶
Authenticate 认证令牌
func (*StaticTokenAuthenticator) RemoveToken ¶
func (a *StaticTokenAuthenticator) RemoveToken(token string)
RemoveToken 移除令牌
type Stats ¶
type Stats struct {
TotalRequests uint64 `json:"total_requests"` // 总请求数
AuthRequests uint64 `json:"auth_requests"` // 需要认证的请求数
SuccessRequests uint64 `json:"success_requests"` // 认证成功请求数
FailureRequests uint64 `json:"failure_requests"` // 认证失败请求数
SkippedRequests uint64 `json:"skipped_requests"` // 跳过认证请求数
LastAuthTime time.Time `json:"last_auth_time"` // 最后认证时间
LastFailureTime time.Time `json:"last_failure_time"` // 最后失败时间
}
Stats 认证统计信息
type TokenExtractor ¶
type TokenExtractor interface {
// Extract 从请求中提取令牌
Extract(ctx context.Context, metadata map[string]any) (string, error)
}
TokenExtractor 令牌提取器接口
type TrustedHeaderAuthenticator ¶ added in v0.3.0
type TrustedHeaderAuthenticator struct{}
TrustedHeaderAuthenticator 信任上游(API 网关 / SignVerify 中间件)已验证的 header 值,直接将其作为用户 ID 写入 auth.User。适用于"网关已认证"场景, 通常配合 signverify 中间件使用以防止 header 伪造。
用法:
auth.NewAuthMiddleware(auth.Config{
TokenExtractor: auth.NewHeaderTokenExtractor("X-User-Id", ""),
Authenticator: auth.NewTrustedHeaderAuthenticator(),
})
func NewTrustedHeaderAuthenticator ¶ added in v0.3.0
func NewTrustedHeaderAuthenticator() *TrustedHeaderAuthenticator
NewTrustedHeaderAuthenticator 创建信任 header 认证器。
func (*TrustedHeaderAuthenticator) Authenticate ¶ added in v0.3.0
Authenticate 将 token(即 header 值)直接作为用户 ID。