概述
认证 API 提供用户注册、登录、电子邮件验证、密码重置和 OAuth 集成的端点。标头
对于已认证的函数调用:注册用户
创建新用户账户。查询参数
请求体
示例(Web 客户端)
示例(非 Web 客户端)
响应(Web 客户端)
响应(非 Web 客户端)
- 对于 Web 客户端:返回
csrfToken,刷新令牌存储在 httpOnly Cookie 中。 - 对于 非 Web 客户端(
mobile、desktop、server):直接在响应中返回refreshToken。安全地将其存储在您的客户端或服务器运行时中。 - 使用
server用于受信任的服务器端调用者,例如 SSR 应用、BFF 或无法依赖浏览器 Cookie 的 CLI。 - 如果
requireEmailVerification为true,accessToken和令牌将为null,用户必须在登录前验证其电子邮件。
登录
认证用户并获取访问令牌。查询参数
请求体
示例(Web 客户端)
示例(非 Web 客户端)
响应(Web 客户端)
响应(非 Web 客户端)
- 对于 Web 客户端:返回
csrfToken,刷新令牌存储在 httpOnly Cookie 中。调用/api/auth/refresh时在X-CSRF-Token标头中包含csrfToken。 - 对于 非 Web 客户端(
mobile、desktop、server):直接返回refreshToken。安全地存储它,并在调用/api/auth/refresh时在请求体中包含它。
邮箱 OTP 登录
当用户需要通过发送到邮箱的 6 位验证码进行免密码登录时,使用此流程。发送登录验证码
请求体
202 Accepted,不会透露此邮箱是否已经属于某个用户。
使用验证码创建会话
查询参数
请求体
client_type 行为。
- 验证码有效期为 5 分钟,只能使用一次,并会在三次失败尝试后失效。
- InsForge 不会在发送验证码时创建用户。如果邮箱尚未注册,只会在验证成功后创建已验证的免密码用户。
- 为现有的未验证账户验证验证码会清除其已存储的密码,使该账户变为免密码。
- 如果已禁用公开注册,现有用户仍可登录。未知邮箱的有效验证码会被消费,并返回 HTTP 403。
刷新令牌
使用刷新令牌刷新访问令牌。查询参数
标头(Web 客户端)
请求体(非 Web 客户端)
示例(Web 客户端)
示例(非 Web 客户端)
响应(Web 客户端)
响应(非 Web 客户端)
令牌轮换已为安全性而实现:
- Web 客户端:每次刷新都返回一个新的
csrfToken,该令牌必须用于后续刷新请求。 - 非 Web 客户端(
mobile、desktop、server):每次刷新都返回一个新的refreshToken。您必须持久化此新令牌并将其用于下一次刷新。在内存中更新accessToken。
登出
登出并清除刷新令牌 Cookie。示例
响应
获取当前用户
从 JWT 令牌获取当前已认证用户的信息。 此 REST 端点不会自动刷新过期的访问令牌。- 对于原始 REST 客户端,在需要时调用
POST /api/auth/refresh。 - 对于使用 TypeScript SDK 的浏览器应用,在启动期间调用
auth.getCurrentUser()。SDK 将在可以刷新会话时自动使用 httpOnly 刷新 Cookie。 - 此自动刷新行为仅限浏览器。服务器、移动和其他非浏览器客户端应显式刷新。
示例
响应
更新个人资料
更新当前用户的个人资料。请求体
示例
响应
获取用户个人资料
按 ID 获取用户的公开个人资料信息。示例
响应
电子邮件验证
发送验证电子邮件
请求体
示例
响应
验证电子邮件
查询参数
请求体
对于基于链接的验证,电子邮件点击使用:
redirectTo URL。POST /api/auth/email/verify 是用于 6 位代码提交的 JSON API。
像这样处理浏览器重定向:
- 成功:
?insforge_status=success&insforge_type=verify_email - 错误:
?insforge_status=error&insforge_type=verify_email&insforge_error=... insforge_status:浏览器链接流的结果。对于验证,值为success或error。insforge_type:流标识符。对于验证链接,这始终是verify_email。insforge_error:仅当insforge_status=error时出现。可显示或记录的人类可读错误消息。- 推荐处理:使用您的登录页面作为
redirectTo。当insforge_status=success时,显示确认消息并要求用户使用其电子邮件和密码登录。 - 如果
redirectTo未被允许列表,InsForge 会返回400错误,其消息包括被拒绝的 URL,nextActions告诉您将其添加到allowedRedirectUrls。
示例(Web 客户端)
示例(非 Web 客户端)
响应(Web 客户端)
响应(非 Web 客户端)
密码重置
发送重置电子邮件
请求体
示例
交换代码获取令牌(仅代码方法)
请求体
示例
响应
重置密码
redirectTo URL,查询字符串中包含重置令牌。POST /api/auth/email/reset-password 仍然是接受新密码的 JSON API。
像这样处理浏览器重定向:
- 准备重置:
?token=...&insforge_status=ready&insforge_type=reset_password - 错误:
?insforge_status=error&insforge_type=reset_password&insforge_error=... token:仅当insforge_status=ready时出现。将此值作为otp传递给POST /api/auth/email/reset-password。insforge_status:浏览器链接流的结果。对于重置链接,值为ready或error。insforge_type:流标识符。对于重置链接,这始终是reset_password。insforge_error:仅当insforge_status=error时出现。可显示或记录的人类可读错误消息。- 您的应用应仅在
insforge_status=ready和token存在时呈现重置密码表单。
请求体
示例
响应
OAuth 认证
OAuth 认证现在使用 PKCE(代码交换证明密钥)流以增强安全性。不是直接在重定向 URL 中返回令牌,而是返回必须使用授权码交换令牌的授权码。启动 OAuth 流
查询参数
仅当额外的查询参数与服务器拥有的 OAuth 字段不冲突时,才会将其作为提供程序特定的提示转发。不要传递
client_id、redirect_uri、code_challenge、state、response_type 或 scope;InsForge/提供程序生成的值获胜,冲突的客户端值被忽略。支持的提供程序
googlegithubdiscordlinkedinfacebookapplemicrosoftxspotify- 由
GET /api/auth/public-config在customOAuthProviders中返回的任何自定义提供程序密钥
示例
响应
OAuth 回调
用户使用提供程序认证后,他们将被重定向到您的redirect_uri,并带上授权码:
insforge_code 是一个临时授权码,必须使用 /api/auth/oauth/exchange 端点交换为令牌。交换代码获取令牌
交换授权码获取访问令牌和刷新令牌。查询参数
请求体
示例
响应
- 对于 Web 客户端:
refreshToken将为null,并返回csrfToken。刷新令牌存储在 httpOnly Cookie 中。 - 对于 非 Web 客户端(
mobile、desktop、server):直接返回refreshToken。安全地存储它。
完整 OAuth 流示例(非 Web)
公开配置
获取公开认证设置(无需认证)。示例
响应
管理员端点
这些端点需要project_admin 角色。
列出所有用户
按 ID 获取用户
删除用户
生成匿名令牌
获取认证配置
获取当前认证设置(仅管理员)。示例
响应
allowedRedirectUrls 条目与完整的 redirectTo 值匹配,包括方案、主机、可选端口和路径。
- 精确条目必须完全匹配,例如
https://myapp.com/dashboard。 - 通配符仅在主机部分支持,例如
https://*.myapp.com/callback。 - 深层链接在明确列出时允许,例如
com.example.app:/oauth2redirect或myapp://auth/callback。 - 如果
allowedRedirectUrls为空,InsForge 允许所有重定向以方便开发者。这对生产不安全,应在本地开发之外避免。
更新认证配置
更新认证设置(仅管理员)。请求体
示例
交换管理员会话
交换云提供程序授权码获取管理员会话。请求体
示例
响应
获取当前管理员会话
从项目管理员访问令牌获取当前仪表板管理员会话。响应
刷新管理员会话
刷新仪表板管理员访问令牌。此端点使用仅限仪表板的insforge_admin_refresh_token httpOnly Cookie,不共享应用/用户刷新 Cookie。