2026-08-09 10:43:45 +08:00
|
|
|
|
# BSM 通行证服务
|
|
|
|
|
|
|
|
|
|
|
|
基于 Go、gRPC 和 Protocol Buffers 构建的综合用户认证和账户管理服务。
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 功能特性
|
|
|
|
|
|
|
|
|
|
|
|
- **用户认证**: 支持密码登录和验证码登录
|
|
|
|
|
|
- **账户管理**: 完整的用户资料和数据管理
|
|
|
|
|
|
- **标签系统**: 用户标签和分类管理
|
|
|
|
|
|
- **KYC 集成**: 与 Jumio 的身份验证集成
|
|
|
|
|
|
- **密码找回**: 安全的密码重置功能
|
|
|
|
|
|
- **统计分析**: 用户活动和参与度指标
|
|
|
|
|
|
- **gRPC 和 REST API**: 通过 gRPC-Gateway 支持双协议
|
|
|
|
|
|
- **微服务架构**: 可扩展和可维护的设计
|
|
|
|
|
|
- **数据库支持**: 兼容 PostgreSQL 和 MySQL
|
|
|
|
|
|
- **缓存**: Redis 集成以优化性能
|
|
|
|
|
|
- **服务发现**: Etcd 集成用于微服务协调
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 系统要求
|
|
|
|
|
|
|
|
|
|
|
|
- Go 1.26.5 或更高版本
|
|
|
|
|
|
- PostgreSQL 或 MySQL 数据库
|
|
|
|
|
|
- Redis 服务器
|
|
|
|
|
|
- Etcd(微服务模式需要)
|
|
|
|
|
|
- Protocol Buffers 编译器 (protoc)
|
|
|
|
|
|
- Buf CLI(用于 proto 管理)
|
|
|
|
|
|
|
|
|
|
|
|
## 🛠️ 安装部署
|
|
|
|
|
|
|
|
|
|
|
|
1. **克隆仓库**
|
|
|
|
|
|
```bash
|
2026-08-09 12:41:08 +08:00
|
|
|
|
git clone bsm/full/module/base/passport
|
2026-08-09 10:43:45 +08:00
|
|
|
|
cd passport
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2. **安装依赖**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
go mod download
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
3. **安装开发工具**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
|
|
|
|
|
|
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
|
|
|
|
|
|
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest
|
|
|
|
|
|
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
4. **生成 Protocol Buffer 文件**
|
|
|
|
|
|
```bash
|
2026-08-09 12:41:08 +08:00
|
|
|
|
# Buf 配置已移除;请使用团队约定的 protoc 生成命令
|
2026-08-09 10:43:45 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## ⚙️ 配置说明
|
|
|
|
|
|
|
|
|
|
|
|
服务使用位于 `etc/` 目录下的 YAML 配置文件:
|
|
|
|
|
|
|
|
|
|
|
|
- `passport_dev.yaml` - 开发环境
|
|
|
|
|
|
- `passport_prod.yaml` - 生产环境
|
|
|
|
|
|
- `passport_test.yaml` - 测试环境
|
|
|
|
|
|
|
|
|
|
|
|
### 配置结构
|
|
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
Service: passport
|
|
|
|
|
|
Port: 12426
|
|
|
|
|
|
|
|
|
|
|
|
# 数据库配置
|
|
|
|
|
|
Databases:
|
|
|
|
|
|
Driver: postgres # 或 mysql
|
|
|
|
|
|
Source:
|
|
|
|
|
|
- host=localhost user=postgres password=yourpassword dbname=bsm_dev port=5432 sslmode=disable TimeZone=Asia/Shanghai
|
|
|
|
|
|
|
|
|
|
|
|
# Redis 缓存
|
|
|
|
|
|
Cache: redis://null:yourpassword@localhost:6379/
|
|
|
|
|
|
|
|
|
|
|
|
# 微服务设置
|
|
|
|
|
|
MicroService:
|
|
|
|
|
|
Enable: false
|
|
|
|
|
|
Anonymous:
|
|
|
|
|
|
- passport.ping.hello
|
|
|
|
|
|
|
|
|
|
|
|
# 微信集成
|
|
|
|
|
|
WeChatConf:
|
|
|
|
|
|
AppID: your_wechat_app_id
|
|
|
|
|
|
AppSecret: your_wechat_app_secret
|
|
|
|
|
|
|
|
|
|
|
|
# KYC 配置
|
|
|
|
|
|
Kyc:
|
|
|
|
|
|
Provider: jumio
|
|
|
|
|
|
BaseUrl: https://api.jumio.com
|
|
|
|
|
|
ApiSecret: your_api_secret
|
|
|
|
|
|
ApiToken: your_api_token
|
|
|
|
|
|
ApiArgs: additional_args
|
|
|
|
|
|
|
|
|
|
|
|
# 网关设置
|
|
|
|
|
|
Gateway:
|
|
|
|
|
|
Enable: true
|
|
|
|
|
|
Port: 12425
|
|
|
|
|
|
|
|
|
|
|
|
# JWT Token 配置
|
|
|
|
|
|
Token:
|
|
|
|
|
|
Prefix: "/token/"
|
|
|
|
|
|
Expire: 86400 # 24小时(秒)
|
|
|
|
|
|
|
|
|
|
|
|
# 服务密钥
|
|
|
|
|
|
SecretKey: your_32_character_secret_key_here
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 运行服务
|
|
|
|
|
|
|
|
|
|
|
|
### 开发模式
|
|
|
|
|
|
|
|
|
|
|
|
1. **启动主服务**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
go run cmd/main/main.go
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2. **访问服务**
|
|
|
|
|
|
- gRPC: `localhost:12426`
|
|
|
|
|
|
- REST API: `localhost:12425`
|
|
|
|
|
|
- Swagger UI: `http://localhost:12425/passport.swagger.json`
|
|
|
|
|
|
|
|
|
|
|
|
### 生产环境部署
|
|
|
|
|
|
|
|
|
|
|
|
1. **构建二进制文件**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
go build -o passport cmd/main/main.go
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2. **使用生产配置运行**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
./passport -env=prod
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📚 API 文档
|
|
|
|
|
|
|
|
|
|
|
|
### gRPC 服务
|
|
|
|
|
|
|
|
|
|
|
|
服务提供以下 gRPC 服务:
|
|
|
|
|
|
|
|
|
|
|
|
#### 账户服务 (Account Service)
|
|
|
|
|
|
- `Get()` - 获取完整用户信息
|
|
|
|
|
|
- `SetData()` - 更新用户资料数据
|
|
|
|
|
|
- `SetPassword()` - 修改用户密码
|
|
|
|
|
|
- `TagCreate()` - 创建用户标签
|
|
|
|
|
|
- `TagRemove()` - 删除用户标签
|
|
|
|
|
|
- `Statistics()` - 获取用户统计信息
|
|
|
|
|
|
|
|
|
|
|
|
#### 登录服务 (Login Service)
|
|
|
|
|
|
- `Pwd()` - 密码登录
|
|
|
|
|
|
- `Code()` - 验证码登录
|
|
|
|
|
|
|
|
|
|
|
|
#### 注册服务 (Register Service)
|
|
|
|
|
|
- `Code()` - 发送注册验证码
|
|
|
|
|
|
- `Pwd()` - 密码注册
|
|
|
|
|
|
- `Do()` - 完成注册流程
|
|
|
|
|
|
|
|
|
|
|
|
#### 找回密码服务 (Forget Service)
|
|
|
|
|
|
- `Verify()` - 验证密码重置请求
|
|
|
|
|
|
- `Reset()` - 重置密码
|
|
|
|
|
|
|
|
|
|
|
|
#### KYC 服务 (KYC Service)
|
|
|
|
|
|
- `Request()` - 发起 KYC 验证
|
|
|
|
|
|
- `JumioCallback()` - 处理 KYC 提供商回调
|
|
|
|
|
|
|
|
|
|
|
|
### REST API
|
|
|
|
|
|
|
|
|
|
|
|
所有 gRPC 服务通过 gRPC-Gateway 自动暴露为 REST 端点:
|
|
|
|
|
|
|
|
|
|
|
|
- `POST /v1/account` - 获取用户账户
|
|
|
|
|
|
- `POST /v1/account/data` - 更新用户数据
|
|
|
|
|
|
- `POST /v1/account/password` - 修改密码
|
|
|
|
|
|
- `POST /v1/login/pwd` - 密码登录
|
|
|
|
|
|
- `POST /v1/login/code` - 验证码登录
|
|
|
|
|
|
- `POST /v1/register` - 用户注册
|
|
|
|
|
|
|
|
|
|
|
|
## 🏗️ 系统架构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
|
|
|
|
│ gRPC 客户端 │ │ REST 客户端 │ │ Web 客户端 │
|
|
|
|
|
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
└───────────────────────┼───────────────────────┘
|
|
|
|
|
|
│
|
|
|
|
|
|
┌─────────────────┐
|
|
|
|
|
|
│ gRPC 网关 │
|
|
|
|
|
|
└─────────────────┘
|
|
|
|
|
|
│
|
|
|
|
|
|
┌─────────────────┐
|
|
|
|
|
|
│ gRPC 服务器 │
|
|
|
|
|
|
└─────────────────┘
|
|
|
|
|
|
│
|
|
|
|
|
|
┌───────────────────────┼───────────────────────┐
|
|
|
|
|
|
│ │ │
|
|
|
|
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
|
|
|
|
│ PostgreSQL │ │ Redis │ │ Etcd │
|
|
|
|
|
|
│ MySQL │ │ 缓存 │ │ 服务发现 │
|
|
|
|
|
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔧 开发指南
|
|
|
|
|
|
|
|
|
|
|
|
### 项目结构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
passport/
|
|
|
|
|
|
├── cmd/ # Application entry points
|
|
|
|
|
|
│ ├── main/ # Main service
|
|
|
|
|
|
│ └── cli/ # CLI tools
|
|
|
|
|
|
├── internal/ # Private application code
|
|
|
|
|
|
│ ├── config/ # Configuration management
|
|
|
|
|
|
│ ├── impl/ # Service implementations
|
|
|
|
|
|
│ ├── logic/ # Business logic
|
|
|
|
|
|
│ ├── models/ # Database models
|
|
|
|
|
|
│ ├── server/ # gRPC server setup
|
|
|
|
|
|
│ └── vars/ # Constants and variables
|
|
|
|
|
|
├── pb/ # Generated Protocol Buffer files
|
|
|
|
|
|
├── proto/ # Protocol Buffer definitions
|
|
|
|
|
|
├── etc/ # Configuration files
|
|
|
|
|
|
├── swagger/ # OpenAPI/Swagger documentation
|
|
|
|
|
|
├── scripts/ # Build and deployment scripts
|
|
|
|
|
|
└── test/ # Test files and examples
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Adding New Features
|
|
|
|
|
|
|
|
|
|
|
|
1. **Define Protocol Buffers**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Edit proto files in proto/
|
|
|
|
|
|
vim proto/your_service.proto
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2. **Generate Code**
|
|
|
|
|
|
```bash
|
2026-08-09 12:41:08 +08:00
|
|
|
|
# Buf 配置已移除;请使用团队约定的 protoc 生成命令
|
2026-08-09 10:43:45 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
3. **Implement Business Logic**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Add logic in internal/logic/
|
|
|
|
|
|
vim internal/logic/your_service/your_method.go
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
4. **Register Service**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Update server registration in internal/server/
|
|
|
|
|
|
vim internal/server/new.go
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Testing
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Run all tests
|
|
|
|
|
|
go test ./...
|
|
|
|
|
|
|
|
|
|
|
|
# Run tests with coverage
|
|
|
|
|
|
go test -cover ./...
|
|
|
|
|
|
|
|
|
|
|
|
# Test specific package
|
|
|
|
|
|
go test ./internal/logic/login/
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Code Generation
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Generate Protocol Buffer files
|
2026-08-09 12:41:08 +08:00
|
|
|
|
# Buf 配置已移除;请使用团队约定的 protoc 生成命令
|
2026-08-09 10:43:45 +08:00
|
|
|
|
|
|
|
|
|
|
# Lint proto files
|
2026-08-09 12:41:08 +08:00
|
|
|
|
# 使用团队约定的 proto lint 工具
|
2026-08-09 10:43:45 +08:00
|
|
|
|
|
|
|
|
|
|
# Format proto files
|
2026-08-09 12:41:08 +08:00
|
|
|
|
# 使用团队约定的 proto 格式化工具
|
2026-08-09 10:43:45 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔒 Security Features
|
|
|
|
|
|
|
|
|
|
|
|
- **Password Hashing**: bcrypt with salt for secure password storage
|
|
|
|
|
|
- **JWT Tokens**: Secure token-based authentication
|
|
|
|
|
|
- **Input Validation**: Comprehensive request validation
|
|
|
|
|
|
- **SQL Injection Protection**: Parameterized queries with GORM
|
|
|
|
|
|
- **Rate Limiting**: Built-in request rate limiting
|
|
|
|
|
|
- **CORS Support**: Configurable cross-origin resource sharing
|
|
|
|
|
|
|
|
|
|
|
|
## 📊 Monitoring & Observability
|
|
|
|
|
|
|
|
|
|
|
|
- **Structured Logging**: JSON-formatted logs with different levels
|
|
|
|
|
|
- **Metrics**: Built-in metrics collection
|
|
|
|
|
|
- **Health Checks**: Service health monitoring endpoints
|
|
|
|
|
|
- **Distributed Tracing**: APM integration support
|
|
|
|
|
|
- **Performance Monitoring**: Request/response time tracking
|
|
|
|
|
|
|
|
|
|
|
|
## 🐳 Docker Support
|
|
|
|
|
|
|
|
|
|
|
|
```dockerfile
|
|
|
|
|
|
# Build stage
|
|
|
|
|
|
FROM golang:1.26.5-alpine AS builder
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
COPY . .
|
|
|
|
|
|
RUN go mod download
|
|
|
|
|
|
RUN go build -o passport cmd/main/main.go
|
|
|
|
|
|
|
|
|
|
|
|
# Runtime stage
|
|
|
|
|
|
FROM alpine:latest
|
|
|
|
|
|
RUN apk --no-cache add ca-certificates
|
|
|
|
|
|
WORKDIR /root/
|
|
|
|
|
|
COPY --from=builder /app/passport .
|
|
|
|
|
|
COPY --from=builder /app/etc ./etc
|
|
|
|
|
|
COPY --from=builder /app/swagger ./swagger
|
|
|
|
|
|
CMD ["./passport"]
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🤝 Contributing
|
|
|
|
|
|
|
|
|
|
|
|
1. Fork the repository
|
|
|
|
|
|
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
|
|
|
|
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
|
|
|
|
|
|
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
|
|
|
|
5. Open a Pull Request
|
|
|
|
|
|
|
|
|
|
|
|
### Code Style
|
|
|
|
|
|
|
|
|
|
|
|
- Follow Go conventions and best practices
|
|
|
|
|
|
- Use `gofmt` for code formatting
|
|
|
|
|
|
- Add comments for exported functions
|
|
|
|
|
|
- Write tests for new features
|
|
|
|
|
|
- Update documentation as needed
|
|
|
|
|
|
|
|
|
|
|
|
## 📝 License
|
|
|
|
|
|
|
|
|
|
|
|
This project is proprietary software. All rights reserved.
|
|
|
|
|
|
|
|
|
|
|
|
## 🆘 Support
|
|
|
|
|
|
|
|
|
|
|
|
For support and questions:
|
|
|
|
|
|
|
|
|
|
|
|
- Create an issue in the repository
|
|
|
|
|
|
- Contact the development team
|
|
|
|
|
|
- Check the documentation in `/docs`
|
|
|
|
|
|
|
|
|
|
|
|
## 🔄 Version History
|
|
|
|
|
|
|
|
|
|
|
|
- **v1.0.0** - Initial release with core authentication features
|
|
|
|
|
|
- **v1.1.0** - Added KYC integration and tag system
|
|
|
|
|
|
- **v1.2.0** - Enhanced security and performance optimizations
|
|
|
|
|
|
- **Current** - Go 1.26.5 compatibility and bug fixes
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 Roadmap
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] OAuth2 integration
|
|
|
|
|
|
- [ ] Multi-factor authentication
|
|
|
|
|
|
- [ ] Advanced user analytics
|
|
|
|
|
|
- [ ] Mobile SDK support
|
|
|
|
|
|
- [ ] GraphQL API support
|
|
|
|
|
|
- [ ] Kubernetes deployment manifests
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-08-09 12:41:08 +08:00
|
|
|
|
**Built with ❤️ by the BSM Development Team**
|