认证模块
认证模块提供基于 Sa-Token 的完整认证体系,支持 SM2 国密加密传输。
功能说明
- B 端用户名密码登录(SM2 加密)
- B 端用户注册
- 验证码生成与校验
- Token 签发与校验
API 接口
B 端认证
| 方法 | 路径 | 权限 | 说明 |
|---|---|---|---|
| POST | /api/v1/public/b/login | 无 | B 端用户名密码登录 |
| POST | /api/v1/public/b/register | 无 | B 端用户注册 |
验证码
| 方法 | 路径 | 权限 | 说明 |
|---|---|---|---|
| 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 国密加密
密码加密流程
- 前端获取 SM2 公钥
- 前端使用公钥加密密码
- 后端使用私钥解密密码
- 后端使用 BCrypt 验证密码
配置 SM2 密钥
yaml
auth:
sm2:
private-key: 你的SM2私钥
public-key: 你的SM2公钥生产环境请务必更换默认的 SM2 密钥。