Skip to content

身份认证与权限

面向后端开发者的身份体系功能手册,聚焦认证、授权和 Token 管理。

Table of Contents

认证机制

JWT Token 流程

登录流程: 登录 → 查询用户角色 → 聚合权限 → 生成 JWT

Token Claims 包含:

字段说明
sub用户 ID
roles角色名称列表
permissions权限列表

功能特性

  • 用户注册(用户名/邮箱唯一性验证)
  • 用户登录(支持用户名或邮箱)
  • Token 刷新(Access 15分钟,Refresh 7天)
  • bcrypt 密码加密
  • 用户状态检查(仅 active 可登录)

架构设计

internal/
├── domain/auth/           # 认证领域服务接口
├── application/auth/      # Register/Login/Refresh Use Case
├── infrastructure/auth/   # JWT 管理器、服务实现
├── adapters/http/
│   ├── handler/auth.go    # HTTP Handler
│   └── middleware/jwt.go  # JWT 鉴权中间件

API 端点

公开端点:

方法路径说明
POST/api/auth/register注册新用户
POST/api/auth/login用户登录
POST/api/auth/refresh刷新访问令牌

详细 API 请参阅 Swagger UI (/swagger/index.html)

RBAC 权限系统

基于角色的访问控制 (Role-Based Access Control),采用 URN 风格格式。

详细设计见 URN 风格 RBAC

URN 格式

{scope}:{type}:{identifier}
说明示例
scope作用域sys, self, public
type模块类型users, profile, tokens
identifier操作/IDcreate, read, *

示例: sys:users:create (系统级创建用户), self:profile:update (更新自己资料)

通配符匹配

  • *:*:* - 超级管理员权限
  • sys:*:* - 系统域全部权限
  • sys:users:* - 用户模块全部权限

中间件

执行顺序: Auth → RBAC → Handler

中间件位置职责
Authinternal/adapters/http/middleware/auth.go验证 Token
RBACinternal/adapters/http/middleware/rbac.go检查权限
Auditinternal/adapters/http/middleware/audit.go记录日志

路由保护

路由配置: internal/adapters/http/router.go

最佳实践

  • 遵循最小权限原则
  • 使用角色而非直接分配权限
  • 敏感操作启用审计日志
  • Token 有效期不超过 24 小时

Personal Access Token (PAT)

长期凭证,作为 JWT Token 的替代方案,用于 API 集成、CLI 和自动化脚本。

PAT vs JWT

特性JWT TokenPersonal Access Token
用途Web/移动应用API 集成、CLI、脚本
有效期短期(1小时)长期(7/30/90天或永久)
刷新Refresh Token无需刷新
权限用户全部权限用户权限的子集
删除不支持支持即时删除

Token 格式

格式: pat_<5位前缀>_<32位随机字符>

安全特性:

  • 完整 token 仅在创建时显示一次
  • 数据库存储 SHA-256 哈希值

API 端点

方法路径说明
POST/api/user/tokens创建 Token
GET/api/user/tokens查看 Token 列表
DELETE/api/user/tokens/:id删除 Token

最佳实践

  • 只授予完成任务所需的最小权限
  • 测试环境 7 天,生产环境 90 天
  • 使用环境变量或密钥管理服务存储
  • 每 90 天轮换生产环境 Token

安全配置

JWT 配置:

配置项环境变量说明
secretAPP_JWT_SECRET签名密钥(至少 32 字节)
access_token_expiryAPP_JWT_ACCESS_TOKEN_EXPIRY访问令牌有效期
refresh_token_expiryAPP_JWT_REFRESH_TOKEN_EXPIRY刷新令牌有效期

安全特性:

特性说明
密码加密bcrypt (cost=10)
Token 签名HMAC-SHA256
唯一性约束用户名、邮箱数据库层面强制唯一
错误处理登录失败返回通用 "invalid credentials"

基于 DDD + CQRS 架构的企业级应用模板