认证
Dotnify 使用简单的 Bearer 令牌认证系统。会话存储在 Redis 中,TTL 为 7 天。
初始化
POST /api/auth/setup
创建管理员账户。此端点仅在管理员不存在时可用。管理员创建后,此端点返回 409 Conflict。
请求:
json
{
"username": "admin",
"password": "your-secure-password"
}| 字段 | 规则 |
|---|---|
username | 必填,至少 3 个字符 |
password | 必填,至少 8 个字符 |
响应(201):
json
{
"ok": true,
"data": {
"username": "admin",
"createdAt": "2024-01-01T00:00:00.000Z"
}
}错误响应:
| 状态码 | 条件 |
|---|---|
| 405 | 非 POST 请求 |
| 409 | 管理员已初始化 |
| 400 | 用户名 < 3 个字符或密码 < 8 个字符 |
登录
POST /api/auth/login
使用管理员凭据认证并获取会话令牌。
请求:
json
{
"username": "admin",
"password": "your-secure-password"
}响应(200):
json
{
"ok": true,
"data": {
"token": "a1b2c3d4...64-char-hex",
"username": "admin"
}
}token 应在后续请求中作为 Bearer 令牌发送:
Authorization: Bearer a1b2c3d4...64-char-hex错误响应:
| 状态码 | 条件 |
|---|---|
| 401 | 缺失用户名/密码 |
| 401 | 管理员未初始化 |
| 401 | 凭据无效 |
检查状态
GET /api/auth/me
检查当前认证状态。这是公开端点——不需要 Bearer 令牌,但如果提供令牌,将用于确定认证状态。
响应(管理员未创建):
json
{
"ok": true,
"data": {
"setupRequired": true,
"authenticated": false,
"username": null
}
}响应(管理员已存在,未认证):
json
{
"ok": true,
"data": {
"setupRequired": false,
"authenticated": false,
"username": null
}
}响应(已认证):
json
{
"ok": true,
"data": {
"setupRequired": false,
"authenticated": true,
"username": "admin"
}
}登出
POST /api/auth/logout
使 Redis 中的当前会话令牌失效。此端点是幂等的——不带令牌调用仍返回成功。
请求头:
Authorization: Bearer <token>响应(200):
json
{
"ok": true,
"data": {
"loggedOut": true
}
}会话详情
- 令牌格式:64 字符十六进制字符串(32 随机字节)
- TTL:从创建起 7 天(604,800 秒)
- 存储:Redis 键
dotnify:session:<token> - 密码哈希:scrypt,16 字节盐和 64 字节密钥长度
- 验证:时序安全比较,防止时序攻击