auth

package
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 8, 2026 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrUnauthorized 未授权错误
	ErrUnauthorized = errors.New("unauthorized")
	// ErrForbidden 禁止访问错误
	ErrForbidden = errors.New("forbidden")
	// ErrInvalidToken 无效令牌错误
	ErrInvalidToken = errors.New("invalid token")
	// ErrTokenExpired 令牌过期错误
	ErrTokenExpired = errors.New("token expired")
)

Functions

func HTTPMiddleware

func HTTPMiddleware(auth *AuthMiddleware) func(http.Handler) http.Handler

HTTPMiddleware 返回 HTTP 认证中间件

func IsAuthError

func IsAuthError(err error) bool

IsAuthError 检查错误是否为认证相关错误

func IsGRPCAuthError

func IsGRPCAuthError(err error) bool

IsGRPCAuthError 检查错误是否为 gRPC 认证相关错误

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

func RequireRole(roles ...string) func(http.Handler) http.Handler

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 一元服务器拦截器,用于认证

func WithUser

func WithUser(ctx context.Context, user User) context.Context

WithUser 将用户信息注入上下文,返回新 ctx。 供声明式 handler 包装器(pkg/handler)在认证策略通过后把 User 装入 ctx, 业务函数随后用 GetUserFromContext 取出。与 HTTPMiddleware 内部使用同一 key。

Types

type AuthMiddleware

type AuthMiddleware struct {
	// contains filtered or unexported fields
}

AuthMiddleware 认证中间件

func NewAuthMiddleware

func NewAuthMiddleware(config Config) *AuthMiddleware

NewAuthMiddleware 创建认证中间件

func (*AuthMiddleware) Authenticate

func (am *AuthMiddleware) Authenticate(ctx context.Context, metadata map[string]any) (User, error)

Authenticate 执行认证

func (*AuthMiddleware) Authorize

func (am *AuthMiddleware) Authorize(ctx context.Context, user User, resource, action string) error

Authorize 执行授权检查

func (*AuthMiddleware) Name

func (am *AuthMiddleware) Name() string

Name 返回中间件名称

func (*AuthMiddleware) ResetStats

func (am *AuthMiddleware) ResetStats()

ResetStats 重置统计信息

func (*AuthMiddleware) ShouldSkip

func (am *AuthMiddleware) ShouldSkip(path string) bool

ShouldSkip 检查是否应该跳过认证

func (*AuthMiddleware) Stats

func (am *AuthMiddleware) Stats() Stats

Stats 返回统计信息

func (*AuthMiddleware) String

func (am *AuthMiddleware) String() string

String 返回中间件的字符串表示

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

func (a *CallbackAuthenticator) Authenticate(ctx context.Context, token string) (User, error)

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 创建回调授权器

func (*CallbackAuthorizer) Authorize

func (a *CallbackAuthorizer) Authorize(ctx context.Context, user User, resource, action string) error

Authorize 执行授权回调

type ChainAuthenticator

type ChainAuthenticator struct {
	Authenticators []Authenticator
}

ChainAuthenticator 链式认证器(按顺序尝试多个认证器)

func NewChainAuthenticator

func NewChainAuthenticator(authenticators ...Authenticator) *ChainAuthenticator

NewChainAuthenticator 创建链式认证器

func (*ChainAuthenticator) Authenticate

func (a *ChainAuthenticator) Authenticate(ctx context.Context, token string) (User, error)

Authenticate 按顺序尝试多个认证器

type CompositeAuthorizer

type CompositeAuthorizer struct {
	Authorizers []Authorizer
}

CompositeAuthorizer 组合授权器(需要所有授权器都通过)

func NewCompositeAuthorizer

func NewCompositeAuthorizer(authorizers ...Authorizer) *CompositeAuthorizer

NewCompositeAuthorizer 创建组合授权器

func (*CompositeAuthorizer) Authorize

func (a *CompositeAuthorizer) Authorize(ctx context.Context, user User, resource, action string) error

Authorize 检查所有授权器

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 令牌提取器

func (*CookieTokenExtractor) Extract

func (e *CookieTokenExtractor) Extract(ctx context.Context, metadata map[string]any) (string, error)

Extract 从 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 令牌提取器

func (*GRPCMetadataExtractor) Extract

func (e *GRPCMetadataExtractor) Extract(ctx context.Context, metadata map[string]any) (string, error)

Extract 从 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 令牌提取器

func (*HeaderTokenExtractor) Extract

func (e *HeaderTokenExtractor) Extract(ctx context.Context, metadata map[string]any) (string, error)

Extract 从 HTTP 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 创建多源令牌提取器

func (*MultiTokenExtractor) Extract

func (e *MultiTokenExtractor) Extract(ctx context.Context, metadata map[string]any) (string, error)

Extract 按优先级尝试从多个源提取令牌

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 添加路径规则

func (*PathBasedAuthorizer) Authorize

func (a *PathBasedAuthorizer) Authorize(ctx context.Context, user User, resource, action string) error

Authorize 检查用户是否有权限访问路径

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 创建宽松授权器

func (*PermissiveAuthorizer) Authorize

func (a *PermissiveAuthorizer) Authorize(ctx context.Context, user User, resource, action string) error

Authorize 总是允许

type QueryTokenExtractor

type QueryTokenExtractor struct {
	ParamName string // 查询参数名称,如 "token"
}

QueryTokenExtractor URL 查询参数令牌提取器

func NewQueryTokenExtractor

func NewQueryTokenExtractor(paramName string) *QueryTokenExtractor

NewQueryTokenExtractor 创建查询参数令牌提取器

func (*QueryTokenExtractor) Extract

func (e *QueryTokenExtractor) Extract(ctx context.Context, metadata map[string]any) (string, error)

Extract 从查询参数中提取令牌

type RestrictiveAuthorizer

type RestrictiveAuthorizer struct{}

RestrictiveAuthorizer 严格授权器(总是拒绝)

func NewRestrictiveAuthorizer

func NewRestrictiveAuthorizer() *RestrictiveAuthorizer

NewRestrictiveAuthorizer 创建严格授权器

func (*RestrictiveAuthorizer) Authorize

func (a *RestrictiveAuthorizer) Authorize(ctx context.Context, user User, resource, action string) error

Authorize 总是拒绝

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

func (a *SimpleJWTAuthenticator) Authenticate(ctx context.Context, token string) (User, error)

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

func (a *StaticTokenAuthenticator) Authenticate(ctx context.Context, token string) (User, error)

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

func (a *TrustedHeaderAuthenticator) Authenticate(_ context.Context, token string) (User, error)

Authenticate 将 token(即 header 值)直接作为用户 ID。

type User

type User interface {
	// ID 返回用户ID
	ID() string
	// Name 返回用户名
	Name() string
	// Roles 返回用户角色列表
	Roles() []string
	// HasRole 检查用户是否拥有指定角色
	HasRole(role string) bool
	// Metadata 返回用户元数据
	Metadata() map[string]any
}

User 用户信息接口

func GetUserFromContext

func GetUserFromContext(ctx context.Context) (User, bool)

GetUserFromContext 从上下文中获取用户信息

func GetUserFromGRPCContext

func GetUserFromGRPCContext(ctx context.Context) (User, bool)

GetUserFromGRPCContext 从 gRPC 上下文中获取用户信息

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL