跳到主要内容

认证系统

认证系统是井云平台的基础服务系统,负责处理用户认证、授权、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(无效)

微信登录流程

短信验证码流程

短信验证码登录/注册步骤:

发送验证码:

  1. 用户在前端输入手机号
  2. 前端请求认证服务发送验证码
  3. 认证服务调用短信服务 API
  4. 短信服务发送验证码短信给用户
  5. 认证服务返回成功给前端
  6. 前端提示用户输入验证码

验证码登录/注册:

  1. 用户在前端输入验证码
  2. 前端请求认证服务进行验证码登录/注册
  3. 认证服务验证验证码有效性
  4. 认证服务生成 JWT Token
  5. 认证服务返回 Token 给前端
  6. 前端通知用户登录成功

📊 数据模型

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: 验证并刷新Token
  • Logout: 用户登出

微信登录接口

  • WechatLogin: 微信登录
  • GetWechatQRCode: 获取微信登录二维码
  • HandleWechatLoginCallback: 处理微信登录回调
  • GetWechatLoginStatus: 查询微信登录状态

🔒 安全特性

密码安全

  • 加密存储: 使用安全的密码哈希算法
  • 密码强度: 支持密码强度验证
  • 密码重置: 支持通过短信验证码重置密码

Token安全

  • 签名验证: JWT Token签名验证
  • 有效期控制: Token有效期管理
  • 刷新机制: Token刷新机制
  • 撤销机制: Token撤销(登出)

短信验证

  • 防刷机制: 限制短信发送频率
  • 验证码有效期: 验证码有效期管理
  • 验证码长度: 6位数字验证码
  • 使用限制: 每个验证码只能使用一次

微信登录安全

  • OAuth 2.0: 使用OAuth 2.0协议
  • 状态验证: 验证回调状态防止CSRF攻击
  • 时效性: 登录状态有效期控制
  • 自动绑定: 自动创建或绑定用户账号

📈 监控指标

关键指标

  • 登录成功率: 登录请求成功率
  • 注册成功率: 注册请求成功率
  • 短信发送成功率: 短信发送成功率
  • Token验证成功率: Token验证成功率
  • 微信登录成功率: 微信登录成功率

日志记录

  • 登录日志: 记录用户登录行为
  • 注册日志: 记录用户注册行为
  • Token日志: 记录Token生成和验证
  • 错误日志: 记录认证失败原因

🔗 相关文档