Skip to content

认证

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 字节密钥长度
  • 验证:时序安全比较,防止时序攻击