概述
v2 API 采用基于会话的认证方式。 登录通过 POST /auth/login 完成,成功后将建立会话并颁发 CSRF 令牌。
修改状态的请求(POST)需要携带 X-Fess-CSRF-Token 头。 有关 CSRF 令牌的获取方式、轮换机制,以及公共响应信封和错误模型,请参阅 API 概述。
本页介绍以下 4 个端点。
公共用户信息 (UserPayload)
GET /auth/me 和 POST /auth/login 的响应中包含的用户信息,以公共的 UserPayload 结构返回。 所有数组字段均为非 null;无值时返回空数组。
获取认证状态
请求
| HTTP 方法 | GET |
| 端点 | /api/v2/auth/me |
获取当前已认证的用户。 对匿名调用不会报错,而是返回 authenticated: false。 已认证时,user 包含 UserPayload。
响应
成功时(HTTP 200),返回如下公共信封格式的响应(已认证示例)。
response 各元素说明如下。
| 字段 | 类型 | 说明 |
|---|---|---|
authenticated | boolean | 是否已认证。(必填) |
user | object | UserPayload。仅当 authenticated 为 true 时存在。 |
错误响应
登录
请求
| HTTP 方法 | POST |
| 端点 | /api/v2/auth/login |
使用用户名和密码登录。 登录成功时,Servlet 会话 ID 将轮换,颁发新的 CSRF 令牌,并清除调用方 IP 和目标用户的速率限制桶。 超过速率限制时,响应中会附带 Retry-After 头(单位秒)。
即使已有认证会话,也不会短路,传入的凭据始终会被验证。
return_to 必须是符合 ^/[A-Za-z0-9_\-/.?&=%:@+~#*!,;]*$ 的相对路径。 此外,协议相对路径(以 // 开头)及包含 ASCII 控制字符的路径将被拒绝,并从回显的响应中静默移除。
Note
本端点 **不在 CSRF 验证范围之内**(因为登录前令牌不存在)。
Note
与其他状态变更端点不同,本端点会将过大的请求体或不支持的 Content-Type 统一归为 400 invalid_request(其他端点会返回 413 / 415)。
请求体 (LoginRequest)
Content-Type 为 application/json。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
username | string | 是 | 用户名。minLength 为 1。 |
password | string | 是 | 密码。minLength 为 1。 |
return_to | string | 否 | 登录后的重定向目标。须为符合上述格式的相对路径。 |
请求示例:
响应
成功时(HTTP 200,LoginResponse),返回如下公共信封格式的响应。
response 各元素说明如下。
| 字段 | 类型 | 说明 |
|---|---|---|
user | object | UserPayload。 |
csrf_token | string | 与新会话绑定的新 CSRF 令牌。(必填) |
return_to | string | 仅当请求值通过允许列表时才回显。 |
错误响应
注销
请求
| HTTP 方法 | POST |
| 端点 | /api/v2/auth/logout |
注销。此操作是幂等的,即使没有活动会话也会返回 no-op 而不报错。始终返回 ok: true。
需要携带 X-Fess-CSRF-Token 头。
响应
成功时(HTTP 200,OkResponse),返回如下公共信封格式的响应。
response 各元素说明如下。
错误响应
修改密码
请求
| HTTP 方法 | POST |
| 端点 | /api/v2/auth/password |
修改当前用户的密码。 验证 current_password,对 new_password 应用已配置的密码策略,使当前会话失效,并通过 re_login_required: true 提示 SPA 重定向至登录页面。
由于会话在服务端被销毁,因此不返回 csrf_token。SPA 须在重新认证后获取新的令牌。
需要携带 X-Fess-CSRF-Token 头。
请求体 (PasswordChangeRequest)
Content-Type 为 application/json。
响应
成功时(HTTP 200),返回如下公共信封格式的响应。
response 各元素说明如下。