功能简介
Session 保存用户登录态,JWT 用于把当前用户身份短期传递给受信服务,MFA 在已有身份基础上增加挑战与验证步骤。三者解决不同问题:JWT 不是长期 API Key,MFA 也不能替代资源 Permission。
当前支持范围
- 身份认证与账号(SUPPORTED):为应用提供注册、登录、会话、JWT、多因素认证、账号验证与用户管理;具体登录渠道由项目配置决定。
- 认证、Scope 与资源权限(SUPPORTED):用 Session、JWT、API Key、细粒度 Scope、Role 与资源级 Permission 共同保护项目控制面和数据面。
适用场景
- 浏览器通过安全 Cookie 维持登录。
- SSR 或后端服务短期代表当前用户调用 Project API。
- 为敏感账号增加 TOTP、恢复码或受支持的二次因子。
前置条件
- 用户已完成首要登录因子。
- Project 允许目标 MFA 类型。
- 服务端能安全保存 Session/JWT,且不会写入客户端日志。
Console 操作路径
Console → Project → Auth → Security 配置安全策略;用户 MFA 流程由应用使用 Account SDK 驱动。Console 的 Project Users 页面可查看和管理用户 Session,但属于管理员能力。
SDK 示例
SDK · TypeScript
import { Client } from 'appbase-web-sdk';
const client = new Client()
.setEndpoint('https://<APPBASE_HOST>/v1')
.setProject('<PROJECT_ID>');
import {
Account,
AuthenticationFactor,
AuthenticatorType
} from 'appbase-web-sdk';
const account = new Account(client);
const authenticator = await account.createMFAAuthenticator({
type: AuthenticatorType.Totp
});
const challenge = await account.createMFAChallenge({
factor: AuthenticationFactor.Totp
});
// 用户输入一次性验证码后再调用 updateMFAChallenge。
void [authenticator, challenge];
const jwt = await account.createJWT({ duration: 900 });REST 示例
REST · Bash
curl 'https://<APPBASE_HOST>/v1/account/jwts' \
-X POST \
-H 'X-Appwrite-Project: <PROJECT_ID>' \
-H 'Cookie: <USER_SESSION_COOKIE>' \
-H 'Content-Type: application/json' \
--data '{"duration":900}'常见错误
| 现象 | 处理建议 |
|---|---|
401 user_unauthorized | Session 已失效或目标请求不接受当前身份类型。 |
| MFA challenge 无效或过期 | 重新创建 Challenge,不复用旧验证码。 |
403 | 用户已认证,但目标资源 Permission 或 Project 策略拒绝。 |
当前限制
- JWT 应保持短期,不作为永久服务凭据。
- MFA 支持范围受 SDK 版本和 Project 配置影响。
- 恢复码只应向用户展示和保存一次,不得进入日志。
Appwrite 兼容说明
Session、JWT 与 MFA 的术语保持兼容;具体方法签名来自 AppBase Web SDK。
AppBase 增强说明
AppBase 把用户身份与 Organization 控制面、Project Scope、资源 Permission 分层处理,并要求开发环境错误响应不泄漏运行时参数。
发布状态和验证 Commit
origin/main 已核验。验证 Commit:0363062a1c7ea08741975bb5ba0c3361663c9353。
权威来源文件列表
backend-candidate:app/controllers/api/account.phpbackend-candidate:app/controllers/api/projects.phpbackend-candidate:src/Appwrite/Platform/Modules/*/Http/backend-candidate:src/Appwrite/Platform/Modules/Account/Services/Http.phpbackend-candidate:tests/e2e/Services/Account/AccountCustomClientTest.phpbackend-candidate:tests/e2e/Services/Databases/DatabasesBase.phpbackend-candidate:tests/e2e/Services/Storage/StorageCustomClientTest.phpfrontend-candidate:console/src/routes/(console)/project-[region]-[project]/auth/
Appwrite taxonomy 仅作信息架构参考:https://appwrite.io/docs/advanced/security、https://appwrite.io/docs/products/auth。上游页面不是 AppBase 实现证据。