Skip to content

认证模块

认证模块提供基于 Sa-Token 的完整认证体系,支持 SM2 国密加密传输。

功能说明

  • B 端用户名密码登录(SM2 加密)
  • B 端用户注册
  • 验证码生成与校验
  • Token 签发与校验

API 接口

B 端认证

方法路径权限说明
POST/api/v1/public/b/loginB 端用户名密码登录
POST/api/v1/public/b/registerB 端用户注册

验证码

方法路径权限说明
GET/api/v1/public/b/captcha获取 B 端验证码

登录流程

1. 前端获取 SM2 公钥
2. 前端使用公钥加密密码
3. 获取验证码 (/api/v1/public/b/captcha)
4. 发送登录请求 POST /api/v1/public/b/login
   {
     "username": "admin",
     "password": "SM2加密后的密码",
     "captcha_id": "...",
     "captcha_code": "..."
   }
5. 后端验证密码、验证码
6. 认证通过 → 签发 JWT Token
7. 后续请求携带 token Header

请求参数

登录参数

java
public class UsernameLoginParam {
    private String username;        // 用户名
    private String password;        // SM2 加密后的密码
    private String captchaId;       // 验证码 ID
    private String captchaCode;     // 验证码内容
    private String deviceType;      // 设备类型(可选)
    private String deviceId;        // 设备 ID(可选)
}

登录返回

java
public class UsernameLoginResult {
    private String token;           // JWT Token
}

认证配置

Sa-Token 配置在 application.yaml 中:

yaml
sa-token:
  token-name: token             # Token Header 名称
  timeout: 2592000              # Token 有效期 30 天
  is-concurrent: true           # 允许多端登录
  is-share: false               # Token 不共享
  token-style: jwt              # JWT 风格
  jwt-secret-key: 生产环境请更换  # JWT 密钥

权限注解

B 端权限注解

使用 Sa-Token 的注解进行权限控制:

java
// 检查是否登录
@SaCheckLogin

// 检查权限
@SaCheckPermission("sys/user/page")

// 检查角色
@SaCheckRole("admin")

C 端权限注解

使用自定义的 C 端注解:

java
// 检查 C 端用户是否登录
@SaClientCheckLogin

// 检查 C 端用户权限
@SaClientCheckPermission("client/user/page")

// 检查 C 端用户角色
@SaClientCheckRole("member")

SM2 国密加密

密码加密流程

  1. 前端获取 SM2 公钥
  2. 前端使用公钥加密密码
  3. 后端使用私钥解密密码
  4. 后端使用 BCrypt 验证密码

配置 SM2 密钥

yaml
auth:
  sm2:
    private-key: 你的SM2私钥
    public-key: 你的SM2公钥

生产环境请务必更换默认的 SM2 密钥。

Released under the MIT License.