-
Notifications
You must be signed in to change notification settings - Fork 3
API参考文档
Luca edited this page Aug 26, 2026
·
2 revisions
**本文引用的文件**
- [apps/server/openapi.yaml](https://github.com/voidvec/fulla/blob/master/apps/server/openapi.yaml)
- [docs/backend/api-reference.md](https://github.com/voidvec/fulla/blob/master/docs/domains/api-reference.md)
- [libs/drogon/include/fulla/drogon/controllers/AuthorizationEndpointController.h](https://github.com/voidvec/fulla/blob/master/libs/drogon/include/fulla/drogon/controllers/AuthorizationEndpointController.h)
- [libs/drogon/include/fulla/drogon/controllers/TokenEndpointController.h](https://github.com/voidvec/fulla/blob/master/libs/drogon/include/fulla/drogon/controllers/TokenEndpointController.h)
- [libs/drogon/include/fulla/drogon/controllers/DiscoveryController.h](https://github.com/voidvec/fulla/blob/master/libs/drogon/include/fulla/drogon/controllers/DiscoveryController.h)
- [apps/server/src/bootstrap/ControllerRegistration.cc](https://github.com/voidvec/fulla/blob/master/apps/server/src/bootstrap/ControllerRegistration.cc)
- [apps/server/src/bootstrap/OpenApiSetup.cc](https://github.com/voidvec/fulla/blob/master/apps/server/src/bootstrap/OpenApiSetup.cc)
- [docs/backend/security-hardening.md](https://github.com/voidvec/fulla/blob/master/docs/architecture/security-architecture.md)
Loading
Loading
Loading
本文件为 Fulla 的完整 API 参考,覆盖 OAuth2/OIDC、管理接口、用户自助服务、外部身份提供商集成等。内容基于仓库中的 OpenAPI 规范与控制器头文件整理,提供端点方法、URL 模式、请求/响应格式、认证方式、错误码与安全注意事项。版本信息来源于 OpenAPI 元数据;向后兼容性以 OpenAPI 变更为准。
Fulla 后端采用 Drogon 框架,通过显式注册控制器暴露 HTTP 端点,OpenAPI 规范在启动时生成并输出到 docs/api/openapi.json,同时提供 Swagger UI 浏览。关键入口包括:
- 控制器注册:集中注册所有控制器(OAuth2、OIDC、Admin、User Self-Service、MFA、WebAuthn、组织管理等)
- OpenAPI 设置:根据监听器配置生成 server URL 并写入 openapi.json
- 安全与限流:全局安全头注入与 Hodor 插件速率限制
graph TB
Client["客户端"] --> Router["Drogon 路由"]
Router --> CtrlReg["控制器注册<br/>ControllerRegistration.cc"]
CtrlReg --> AuthCtrl["授权端点控制器<br/>AuthorizationEndpointController.h"]
CtrlReg --> TokenCtrl["令牌端点控制器<br/>TokenEndpointController.h"]
CtrlReg --> DiscCtrl["发现端点控制器<br/>DiscoveryController.h"]
CtrlReg --> AdminCtrl["管理控制器(示例: Client/User/Role/Scope)"]
CtrlReg --> UserCtrl["用户自助服务控制器"]
CtrlReg --> MfaCtrl["MFA 控制器"]
CtrlReg --> OrgCtrl["组织控制器"]
OpenApi["OpenAPI 生成<br/>OpenApiSetup.cc"] --> Docs["openapi.json / Swagger UI"]
图表来源
- apps/server/src/bootstrap/ControllerRegistration.cc:41-120
- apps/server/src/bootstrap/OpenApiSetup.cc:10-60
章节来源
- apps/server/src/bootstrap/ControllerRegistration.cc:41-120
- apps/server/src/bootstrap/OpenApiSetup.cc:10-60
- OAuth2/OIDC 协议端点:授权、令牌、用户信息、发现、JWKS、设备授权、令牌撤销与探测
- 管理 API:客户端、用户、角色、权限范围、令牌、审计日志、仪表盘统计
- 用户自助服务:个人资料、密码修改、已授权应用、邮箱验证、密码重置、WebAuthn
- 外部身份提供商:Google、GitHub、微信(可选编译开关)
- 系统健康检查与健康探针
章节来源
下图展示典型授权码流程中各端点的调用顺序与交互主体。
sequenceDiagram
participant C as "客户端"
participant A as "授权端点 /oauth2/authorize"
participant L as "登录/会话"
participant T as "令牌端点 /oauth2/token"
participant U as "用户信息 /oauth2/userinfo"
C->>A : GET ?response_type=code&client_id&redirect_uri&scope&state
A-->>C : 302 重定向至登录或同意页
C->>L : 提交用户名/密码或完成MFA
L-->>A : 返回授权码(code)
C->>T : POST grant_type=authorization_code&code&redirect_uri&client_id&client_secret
T-->>C : {access_token, token_type, expires_in, refresh_token}
C->>U : GET Authorization : Bearer {access_token}
U-->>C : 200 用户信息(JSON)
图表来源
- libs/drogon/include/fulla/drogon/controllers/AuthorizationEndpointController.h:25-32
- libs/drogon/include/fulla/drogon/controllers/TokenEndpointController.h:33-63
- apps/server/openapi.yaml:1231-1600
-
授权端点
- URL: /oauth2/authorize
- 方法: GET
- 参数: response_type=code, client_id, redirect_uri, scope, state
- 响应: 302 重定向携带 code 或错误
- 认证: 公开(需用户登录)
- 参考路径: apps/server/openapi.yaml:1231-1274, AuthorizationEndpointController.h:25-32
-
令牌端点
- URL: /oauth2/token
- 方法: POST
- 参数: grant_type(authorization_code|refresh_token|client_credentials), code/refresh_token, client_id, client_secret
- 响应: 200 {access_token, token_type, expires_in, refresh_token}
- 认证: 客户端认证(Basic 或表单)
- 参考路径: apps/server/openapi.yaml:1564-1600, TokenEndpointController.h:33-68
-
用户信息端点
- URL: /oauth2/userinfo
- 方法: GET
- 认证: Bearer Token
- 响应: 200 {sub, name, email, picture...}
- 参考路径: apps/server/openapi.yaml:113-145, TokenEndpointController.h:35-40
-
OIDC 发现与 JWKS
- /.well-known/openid-configuration: GET 返回提供者元数据
- /.well-known/jwks.json: GET 返回公钥集合
- /.well-known/oauth-authorization-server: GET 返回 OAuth 服务器元数据
- 参考路径: DiscoveryController.h:22-34, apps/server/openapi.yaml:42-71
-
其他协议端点
- /oauth2/introspect: POST (RFC 7662),客户端凭据认证
- /oauth2/revoke: POST (RFC 7009),客户端凭据认证
- /oauth2/device_authorization: POST 设备授权
- /oauth2/device/verify: GET/POST 设备验证
- 参考路径: apps/server/openapi.yaml:1326-1397, apps/server/openapi.yaml:1535-1563
章节来源
- apps/server/openapi.yaml:113-1600
- libs/drogon/include/fulla/drogon/controllers/AuthorizationEndpointController.h:25-32
- libs/drogon/include/fulla/drogon/controllers/TokenEndpointController.h:33-68
- libs/drogon/include/fulla/drogon/controllers/DiscoveryController.h:22-34
-
客户端管理
- /api/admin/clients: GET/POST
- /api/admin/clients/{clientId}: GET/PUT/DELETE
- /api/admin/clients/{clientId}/reset-secret: POST
- /api/admin/clients/{clientId}/scopes: GET/PUT
- 认证: Bearer Token
- 参考路径: apps/server/openapi.yaml:72-241
-
用户管理
- /api/admin/users: GET
- /api/admin/users/{userId}: GET/PUT
- /api/admin/users/{userId}/disable: PUT
- /api/admin/users/{userId}/enable: POST
- /api/admin/users/{userId}/roles: GET/PUT
- 认证: Bearer Token
- 参考路径: apps/server/openapi.yaml:345-561
-
角色与权限范围
- /api/admin/roles: GET/POST
- /api/admin/roles/{roleId}: PUT/DELETE
- /api/admin/scopes: GET/POST
- /api/admin/scopes/{scopeId}: PUT/DELETE
- 认证: Bearer Token
- 参考路径: apps/server/openapi.yaml:562-808
-
令牌与审计
- /api/admin/tokens: GET
- /api/admin/tokens/{tokenPrefix}: DELETE
- /api/admin/tokens/revoke-by-client: POST
- /api/admin/tokens/revoke-by-user: POST
- /api/admin/logs: GET
- 认证: Bearer Token
- 参考路径: apps/server/openapi.yaml:242-344
-
仪表盘统计
- /api/admin/dashboard/stats: GET
- 认证: Bearer Token
- 参考路径: apps/server/openapi.yaml:809-839
章节来源
-
用户资料与会话
- /api/me: GET/DELETE
- /api/me/password: PUT
- /api/me/authorized-apps: GET
- /api/me/authorized-apps/{clientId}: DELETE
- 认证: Bearer Token
- 参考路径: apps/server/openapi.yaml:912-997
-
邮箱验证与密码重置
- /api/verify-email: GET
- /api/verify-email/resend: POST
- /api/password-reset/request: POST
- /api/password-reset/confirm: POST
- 参考路径: apps/server/openapi.yaml:1094-1182
-
WebAuthn
- /api/me/webauthn/credentials: GET
- /api/me/webauthn/register/begin: POST
- /api/me/webauthn/register/finish: POST
- 认证: Bearer Token
- 参考路径: apps/server/openapi.yaml:998-1041
-
外部身份提供商(可选)
- /api/google/login: POST
- /api/github/login: POST
- /api/wechat/login: POST
- 参考路径: apps/server/openapi.yaml:840-911, apps/server/openapi.yaml:1183-1215
-
健康检查
- /health: GET
- 参考路径: apps/server/openapi.yaml:1216-1230
章节来源
- Bearer Token: 用于受保护的管理与用户自助接口
- 客户端凭据: Basic 或表单参数(client_id/client_secret),用于 /oauth2/token、/oauth2/introspect、/oauth2/revoke
- 过滤器: OAuth2AuthFilter 对 /oauth2/userinfo 等端点进行访问令牌校验
- 参考路径: apps/server/openapi.yaml:27-35, TokenEndpointController.h:33-63
章节来源
- apps/server/openapi.yaml:27-35
- libs/drogon/include/fulla/drogon/controllers/TokenEndpointController.h:33-63
- 应用错误码: 统一 Error Envelope,包含 category/code/details/message/request_id
- OAuth2 协议错误码: RFC 6749 §5.2 标准 error/error_description/error_uri
- HTTP 状态码映射: 400/401/403/429/500/503 等
- 参考路径: docs/backend/api-reference.md:213-281
章节来源
- 当前仓库未提供 WebSocket 相关控制器或路由定义。如需实时通信,建议在后端引入 WebSocket 控制器并在 ControllerRegistration 中注册。
[本节不直接分析具体代码文件]
- 控制器注册依赖:所有控制器通过显式 registerController 注册,确保路由与 OpenAPI 文档一致
- 插件依赖:OAuth2Plugin 注入到各控制器与过滤器,提供统一的认证、限流、审计能力
- OpenAPI 生成:启动时读取监听器配置生成 server URL,并输出 openapi.json
graph LR
Reg["ControllerRegistration.cc"] --> AuthCtrl["AuthorizationEndpointController.h"]
Reg --> TokenCtrl["TokenEndpointController.h"]
Reg --> DiscCtrl["DiscoveryController.h"]
Plugin["OAuth2Plugin"] --> AuthCtrl
Plugin --> TokenCtrl
Plugin --> DiscCtrl
OpenApi["OpenApiSetup.cc"] --> Spec["openapi.json"]
图表来源
- apps/server/src/bootstrap/ControllerRegistration.cc:41-120
- apps/server/src/bootstrap/OpenApiSetup.cc:10-60
章节来源
- apps/server/src/bootstrap/ControllerRegistration.cc:41-120
- apps/server/src/bootstrap/OpenApiSetup.cc:10-60
- 速率限制:使用 Hodor 插件实现令牌桶算法,支持 IP/用户/全局多层级限制,白名单跳过限制
- 关键接口限制示例:/oauth2/login、/oauth2/token、/api/register 有严格每分钟限制,超限返回 429
- 安全响应头:全局注入现代安全头,防御常见 Web 攻击
- 参考路径: docs/backend/security-hardening.md:5-32
章节来源
- 无法访问 Swagger UI:确认静态资源目录存在且服务已启用
- OpenAPI 生成失败:运行单元测试定位注册错误,检查控制器是否已正确注册
- 文档不一致:确保控制器变更后重新生成 openapi.json 并提交
- 参考路径: docs/backend/api-reference.md:284-310
章节来源
Fulla 提供了完整的 OAuth2/OIDC 协议端点与管理 API,遵循标准规范并通过 OpenAPI 进行契约化管理。结合 Hodor 速率限制与安全响应头,具备生产可用性与可观测性。建议按本参考文档进行集成与测试,关注错误码与限流策略,确保稳定运行。
[本节不直接分析具体代码文件]
- 版本: 1.0.0(来自 OpenAPI info.version)
- 向后兼容: 以 OpenAPI 变更为准;新增字段应向后兼容,删除或破坏性变更需评估影响
章节来源
- 健康检查: /health 返回服务状态与版本
- 审计日志: /api/admin/logs 获取分页审计记录
- 仪表盘统计: /api/admin/dashboard/stats 获取活跃令牌、失败指标等
- 参考路径: apps/server/openapi.yaml:242-344, apps/server/openapi.yaml:809-839, apps/server/openapi.yaml:1216-1230
章节来源
fulla wiki
- 开发指南
- 快速开始
- 附录
-
API参考文档
- API参考文档
- API参考文档 - OAuth2_OIDC协议端点
- API参考文档 - 错误处理与状态码
- 用户自服务API
- 管理API
- 前端应用
- 安全设计
-
扩展开发
- 扩展开发
- 扩展开发 - SDK集成
- 存储扩展
- 插件开发
- 认证扩展
- 数据库设计
- 架构设计
-
核心库模块
- 核心库模块
- Drogon适配器 (fulla__drogon)
- OAuth2引擎 (fulla__oauth2)
- 存储适配器
- 身份认证模块 (fulla__identity)
- 通用库 (fulla__common)
- 测试策略
- 监控与可观测性
-
运维手册
- 运维手册
- 运维手册 - 生产环境配置
- 升级与迁移
- 故障排查指南
- 数据维护
- 日常运维操作
- 部署指南
- 项目概览