Portal能力对接
基于SSO的资源白名单、权限等级与余额能力对接规范
1. 依赖前提
Portal 能力接入依赖 SSO 已完成:
- 用户必须先通过 SSO 登录,系统拿到
sso_id - 系统登录态中需包含
tenantId(可为字符串或null,具体语义按业务约定)
若 SSO 未接通,Portal 能力无法稳定生效。
2. 能力范围
Portal 接口承载以下业务能力:
- 资源范围控制:限制用户可见资源(应用/模型等)
- 权限等级控制:按等级开放能力
- 余额控制:任务执行前余额校验
3. 开关与策略
3.1 开关配置
| 变量名 | 必填 | 示例 | 说明 |
|---|---|---|---|
| CONFIG_PORTAL_BASE_URL | 否 | http://localhost:5001 | 非空启用 Portal;空值关闭 Portal |
3.1.1 配置位置
Docker 部署场景下,请在 docker-compose.yml 的 easyai-server 服务 environment 中配置 CONFIG_PORTAL_BASE_URL。
示例(docker-compose):
示例:
3.2 路径语义
- Portal 关闭:走本地逻辑
- Portal 开启且用户上下文满足:走 Portal 能力接口
- Portal 路径失败:fail-closed(不静默回退本地)
4. 时序图

5. 第三方 Portal 接口契约
公共约束:
- Base URL:
CONFIG_PORTAL_BASE_URL platform: 固定easyaiuserId: 使用sso_idtenantId: 作为租户维度
5.1 资源范围接口
- Method:
GET - Path:
/auth/{platform}/{tenantId}/{userId}/permissions - 作用:返回资源白名单,决定用户可访问资源集合
标准响应(app 为应用 ID、agent 为智能体 ID,均为 24 位十六进制 ObjectId 字符串;列表可为空但字段建议始终返回):
响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| app | string | 可访问应用(应用 ID)白名单 |
| agent | string | 可访问智能体(智能体 ID)白名单 |
约束:
- key 名称需与系统资源类型字典一致(当前为
app、agent) - value 必须是 ID 列表(字符串数组,一般为 MongoDB ObjectId 形式)
5.2 权限等级接口
- Method:
GET - Path:
/auth/{tenantId}/{userId}/level - 作用:返回用户权限等级;用于控制用户可使用的模型等级(例如仅低等级模型、或开放更高算力/更高阶模型),并驱动与等级相关的其他能力过滤
标准响应:
响应说明:
| 返回值 | 类型 | 含义 |
|---|---|---|
| 3(示例) | number | 用户权限等级;数值越大,通常允许访问的模型等级(模型档位)越高,与系统内「等级 → 可访问模型范围」的映射表一致 |
约束:
- 必须返回 number,不能返回字符串
- 等级范围(例如 0~N)及每个等级与可访问模型集的对应关系需双方明确
5.3 余额接口
- Method:
GET - Path:
/billing/{tenantId}/{userId}/balance - 作用:任务执行前余额校验
标准响应:
响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| balance | number | 当前可用余额 |
约束:
balance必须为数值类型- 计费单位 算力 需与 Easyai 扣费体系一致
6. Portal 对接表单(推荐)
| 配置项 | 示例 | 说明 |
|---|---|---|
| platform | easyai | 固定平台标识 |
| tenantId 规则 | tenant_a / null | 租户字段语义 |
| userId 映射 | sso_id | 与 SSO id 对齐 |
| resourceType 字典 | app(应用)、agent(智能体) | 与权限响应 key 对齐 |
| level 取值规则 | 0~N | 能力分级标准 |
| balance 单位 | point / RMB | 统一计费单位 |
7. 完成标准
- Portal 开启后,权限/资源/余额三类能力按接口返回生效
- Portal 关闭后,不发起 Portal HTTP 调用
- Portal 路径故障时,系统按 fail-closed 返回明确失败,不静默降级