认证系统
认证系统是井云平台的基础服务系统,负责处理用户认证、授权、Token管理以及多种登录方式。
🎯 系统概述
核心功能
- 用户认证: 支持用户名/密码登录、短信验证码登录
- 用户注册: 通过手机号和短信验证码注册
- 微信登录: 支持微信网页授权登 录,包括二维码登录方式
- Token管理: JWT Token生成、验证与刷新
- 登出功能: 用户会话管理与登出
- 邀请码系统: 支持用户间的邀请注册机制
支持的登录方式
- 用户名/密码: 传统登录方式
- 手机号+验证码: 短信登录和注册
- 微信登录: 微信开放平台网站应用授权
🏗️ 架构设计
系统架构
┌─────────────────────────────────────────┐
│ Auth Service (9001) │
├─────────────────────────────────────────┤
│ Service Layer │
│ - UserService │
│ - SMSVerificationService │
│ - WechatLoginService │
├─────────────────────────────────────────┤
│ Business Layer │
│ - User Usecase │
│ - Auth Usecase │
├─────────────────────────────────────────┤
│ Data Layer │
│ - User Repository │
│ - Redis Cache │
└─────────────────────────────────────────┘
技术栈
- 框架: Kratos v2
- 数据库: PostgreSQL
- 缓存: Redis
- 认证: JWT Token
- 第三方集成: 微信开放平台
🔐 认证机制
JWT Token 机制
- Token类型: 用户Token、内部服务Token
- Token有效期: 可配置,默认24小时
- Token刷新: 支持Token刷新机制
- 错误码: 401(过期)、402(无效)
微信登录流程
短信验证码流程
短信 验证码登录/注册步骤:
发送验证码:
- 用户在前端输入手机号
- 前端请求认证服务发送验证码
- 认证服务调用短信服务 API
- 短信服务发送验证码短信给用户
- 认证服务返回成功给前端
- 前端提示用户输入验证码
验证码登录/注册:
- 用户在前端输入验证码
- 前端请求认证服务进行验证码登录/注册
- 认证服务验证验证码有效性
- 认证服务生成 JWT Token
- 认证服务返回 Token 给前端
- 前端通知用户登录成功
📊 数据模型
User (用户)
- 基本信息: username, email, phone, nickname, avatar
- 认证信息: password_hash, wechat_openid, wechat_unionid
- 状态信息: status, is_active, is_verified
- 租户信息: tenant_id (多租户支持)
- 邀请信息: invite_code, inviter_id
- 时间字段: created_at, updated_at, last_login_at
SMSVerification (短信验证码)
- 手机号: phone
- 验证码: code
- 验证用途: purpose (login, register, reset_password)
- 有效期: expires_at
- 使用状态: is_used
- 时间字段: created_at
WechatLoginState (微信登录状态)
- 状态ID: state_id
- 用户ID: user_id (可选)
- 登录状态: status (pending, authenticated, failed, expired)
- 微信信息: openid, unionid, nickname, avatar
- 过期时间: expires_at
- 时间字段: created_at, updated_at
🔌 API 接口
用户认证接口
SendSMSVerificationCode: 发送短信验证码Register: 用户注册Login: 用户登录SMSLogin: 短信登录ValidateAndRefreshToken: 验证并刷新TokenLogout: 用户登出
微信登录接口
WechatLogin: 微信登录GetWechatQRCode: 获取微信登录二维码HandleWechatLoginCallback: 处理微信登录回调GetWechatLoginStatus: 查询微信登录状态
🔒 安全特性
密码安全
- 加密存储: 使用安全的密码哈希算法
- 密码强度: 支持密码强度验证
- 密码重置: 支持通过短信验证码重置密码
Token安全
- 签名验证: JWT Token签名验证
- 有效期控制: Token有效期管理
- 刷新机制: Token刷新机制
- 撤销机制: Token撤销(登出)