Passport 身份认证平台
简介
Passport 是 Alaikis.com 的企业级 SaaS 身份认证平台,为第三方应用提供安全可靠的用户认证和授权服务。系统采用统一用户模型,管理员和终端用户共用 user 表,通过应用绑定区分权限。
架构设计
merchant (商户/租户)
├── app (应用) — type: public/private/internal
│ └── client (OAuth2 客户端凭证)
├── user (统一用户表 — 管理员和终端用户共用)
│ └── app_user (用户-应用绑定, state: 0=待激活, 1=已激活)
│ └── user_role (用户-角色关联)
├── role (角色) + permission (权限) + role_permission (关联)
└── developer (开发者凭证)
统一用户模型
管理员和终端用户共用 user 表,通过 app_user 绑定区分权限:
| 身份 | 判定方式 | 权限 |
|---|---|---|
| 终端用户 | 绑定到 public/private app | 只能操作自己 |
| 商户管理员 | 绑定到 internal app + admin role | 管理本商户全部资源 |
| 平台超管 | 超级商户下的用户 | 跨商户管理 |
Internal App 机制
每个商户注册时自动创建一个 type=internal 的管理后台应用:
- 不可删除、不可改名、不可改类型
- 自动创建对应的 OAuth Client
- 第一个注册的用户自动绑定并分配 admin 角色
应用类型
| type | 含义 | 注册流程 | 激活机制 |
|---|---|---|---|
public | 公开应用 | 用户可自助注册 | 自动激活 (state=1) |
private | 私有应用 | 仅管理员邀请 | 待激活 (state=0),管理员手动激活 |
internal | 内部管理应用 | 注册商户时自动创建 | 绑定即激活,不可删除 |
多商户选择
一个用户可绑定多个商户的应用。登录后:
- 单商户 → 直接进入后台
- 多商户 → 显示选择页面(类似 qcloud/ctyun)
- 后台右上角可切换商户
主要特性
- OAuth 2.0 - 标准授权协议(authorization_code / implicit)
- OpenID Connect (OIDC) - 身份认证层
- 多因素认证 (MFA) - TOTP 一次性密码
- SSO 单点登录 - 跨域纯 Token 方案
- SLO 单点登出 - 三通道并行
- 智能体统一 Token - 一个 Agent Token 跨应用访问
- 多租户架构 - 支持企业级 SaaS,商户间数据隔离
- RBAC 权限 - 角色/权限/租户隔离
- 桌面简化登录 - 仅需 client_id + 密码,无需 client_secret
三套前端系统
| 路径 | 系统 | 技术栈 |
|---|---|---|
/adm/ | 管理后台 | Vite + React + shadcn-ui |
/mc/ | 商户中心 | Vite + React + shadcn-ui |
/u/ | 用户中心 | Vite + React + shadcn-ui |
接入方式
| 方式 | 适用场景 | 需要的凭证 |
|---|---|---|
| 桌面简化登录 | 桌面客户端、CLI、AI Agent | client_id + 用户密码 |
| OAuth 授权码 | Web 应用(有服务端) | client_id + client_secret |
| SSO 跨应用 | 多应用统一登录 | sso_session_id |
快速开始
- 联系平台管理员获取
client_id - 选择接入方式(桌面简化登录推荐用于客户端应用)
- 用户输入账号密码获取 token
- 使用 token 调用用户信息 API
安全特性
- 密码 bcrypt 加密存储
- JWT RS256 签名
- 密码历史校验
- 强制密码修改
- 登录失败锁定
- 完整的审计日志
- client_secret 不嵌入客户端(桌面简化登录)
协议支持
- OAuth 2.0 (RFC 6749)
- OpenID Connect 1.0
- JWT (RFC 7519)
- TOTP (RFC 6238)
- Token Exchange (RFC 8693)