# shared **Repository Path**: mozgs/shared ## Basic Information - **Project Name**: shared - **Description**: 自己学习用,乱用出现问题概不负责 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-13 - **Last Updated**: 2026-02-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 共享认证中间件 这是一个灵活的认证中间件系统,支持多个认证提供商,允许业务系统传入配置和用户凭证。 ## 特性 - **统一验证**:无论用户从哪个认证系统登录,只要token合法就会被接受 - **灵活配置**:支持配置多个认证提供商,每个都有自己的密钥和签发者 - **中间件系统**:提供基本认证、角色验证等多种中间件选项 ## 包结构 ``` pkg/auth/ ├── auth.go # 主认证接口和认证器 ├── config/ # 配置相关 │ └── config.go # 认证配置结构 ├── middleware/ # 中间件实现 │ ├── auth_middleware.go # 基础认证中间件 │ └── role_middleware.go # 角色验证中间件 ├── provider/ # 认证提供商实现 │ ├── provider.go # 提供商接口定义 │ └── jwt_provider.go # JWT认证提供商实现 └── types/ # 类型定义 └── user.go # 用户信息结构 ``` ## 快速开始 ### 1. 配置认证系统 ```go import ( "shared/pkg/auth" "shared/pkg/auth/config" ) // 配置多个认证提供商 authConfig := config.AuthConfig{ Providers: map[string]config.ProviderConfig{ "app1": { Type: "jwt", Key: "my-secret-key-app1", Issuer: "app1-server", Audience: "app1-client", Algorithm: "HS256", }, "app2": { Type: "jwt", Key: "another-secret-key-app2", Issuer: "app2-server", Audience: "app2-client", Algorithm: "HS256", }, }, } // 创建认证器 authenticator := auth.NewAuthenticator(authConfig) ``` ### 2. 使用认证中间件 ```go import "shared/pkg/auth/middleware" // 创建认证中间件 authMiddleware := middleware.NewAuthMiddleware(authenticator) // 应用到HTTP处理器 protectedRoute := authMiddleware.Middleware(yourHandler) ``` ### 3. 使用角色验证中间件 ```go // 创建角色验证中间件 roleMiddleware := middleware.NewRoleMiddleware("admin", "moderator") // 应用到HTTP处理器 adminRoute := authMiddleware.Middleware( roleMiddleware.Middleware(authenticator, adminHandler), ) ``` ### 4. 在处理器中获取用户信息 ```go handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { user, ok := auth.GetUserFromContext(r.Context()) if !ok { http.Error(w, "无法获取用户信息", http.StatusInternalServerError) return } // 使用用户信息 fmt.Printf("当前用户: %s\n", user.Username) }) ``` ## 支持的认证提供商 目前支持JWT认证,可以轻松扩展其他认证方式。 ### JWT提供商配置参数 - `Type`: "jwt" - `Key`: JWT密钥 - `Issuer`: 签发者 - `Audience`: 接收方 - `Algorithm`: 算法 (HS256, HS384, HS512, RS256, RS384, RS512)