Skip to content

Atticus6/api-proxy

Repository files navigation

Proxy Service

一个支持多 token 轮询和多用户认证的 API 代理服务,支持 SSE 流式转发。

功能特性

  • 多用户 token 认证
  • 多后端 token 轮询使用
  • 自动检测失效 token(非 200 响应)
  • 失效 token 1 小时后自动恢复
  • 使用 GORM + SQLite 存储数据
  • 支持 SSE(Server-Sent Events)流式转发
  • 提供管理接口

使用方法

1. 设置环境变量

export TARGET_URL="https://api.example.com"  # 目标 API 地址
export PORT="8080"  # 可选,默认 8080

2. 启动服务

go run main.go

3. 用户管理

创建用户

curl -X POST http://localhost:8080/admin/users \
  -H "Content-Type: application/json" \
  -d '{"username": "user1", "email": "user1@example.com"}'

为用户生成访问 token

# 生成永不过期的 token
curl -X POST http://localhost:8080/admin/users/1/tokens \
  -H "Content-Type: application/json" \
  -d '{"name": "my-token"}'

# 生成 30 天后过期的 token
curl -X POST http://localhost:8080/admin/users/1/tokens \
  -H "Content-Type: application/json" \
  -d '{"name": "my-token", "expires_in": 2592000}'

查看所有用户

curl http://localhost:8080/admin/users

查看用户的所有 token

curl http://localhost:8080/admin/users/1/tokens

4. 后端 Token 管理

添加后端 Token

curl -X POST http://localhost:8080/admin/tokens \
  -H "Content-Type: application/json" \
  -d '{"name": "backend-token-1", "token": "your-backend-token-here"}'

查看所有后端 Token

curl http://localhost:8080/admin/tokens

5. 使用代理

使用用户 token 访问代理服务:

curl http://localhost:8080/your/api/path \
  -H "Authorization: Bearer <user-token>"

工作原理

  1. 用户请求到达代理服务,携带用户 token
  2. 认证中间件验证用户 token 是否有效
  3. 从后端 token 池中轮询选择一个可用的 token
  4. 将请求转发到目标 URL,使用后端 token 作为 Authorization header
  5. 如果响应状态码非 200,标记该后端 token 为无效
  6. 无效的后端 token 在 1 小时后自动恢复可用状态
  7. 直接流式转发响应体,支持 SSE

数据库

使用 SQLite 存储数据,数据库文件:.data/gorm.db

User 表

  • ID: 主键
  • Username: 用户名(唯一)
  • Email: 邮箱(唯一)
  • IsActive: 是否激活
  • CreatedAt: 创建时间
  • UpdatedAt: 更新时间

UserToken 表(用户访问 token)

  • ID: 主键
  • UserID: 用户 ID
  • Token: token 字符串(唯一)
  • Name: token 名称
  • ExpiresAt: 过期时间
  • LastUsedAt: 最后使用时间
  • CreatedAt: 创建时间
  • UpdatedAt: 更新时间

Token 表(后端 token)

  • ID: 主键
  • Name: token 名称
  • Token: token 字符串(唯一)
  • IsValid: 是否有效
  • InvalidatedAt: 失效时间
  • LastUsedAt: 最后使用时间
  • CreatedAt: 创建时间
  • UpdatedAt: 更新时间

API 接口

用户管理

  • POST /admin/users - 创建用户
  • GET /admin/users - 列出所有用户
  • GET /admin/users/:id - 获取用户详情
  • DELETE /admin/users/:id - 删除用户
  • POST /admin/users/:id/tokens - 为用户生成 token
  • GET /admin/users/:id/tokens - 列出用户的所有 token
  • DELETE /admin/user-tokens/:id - 删除用户 token

后端 Token 管理

  • POST /admin/tokens - 添加后端 token
  • GET /admin/tokens - 列出所有后端 token
  • DELETE /admin/tokens/:id - 删除后端 token

About

api代理转发工具

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors