pangu-user-platform/docs/05-模块技术方案/开放API-学生列表授权-需求设计方案.md

5.9 KiB
Raw Permalink Blame History

开放API-学生列表授权 需求设计方案

作者pangu
创建时间2026-02-04
评审状态:待评审


一、背景与目标

1.1 背景

盘古用户认证中心已具备「应用管理」能力可创建第三方应用、分配应用编码appCode与密钥appSecret并在管理后台为应用勾选「接口授权」。当前缺少对外暴露的开放 API基于应用身份的签名鉴权与接口授权校验,外部系统无法在未登录用户的前提下,以应用身份安全调用已授权接口。

1.2 目标

  • 需求侧:支持外部系统以「应用身份」调用指定已授权接口(首期以学生列表查询为真实场景),不依赖用户登录 Token。
  • 安全侧:请求必须携带应用编码、时间戳、签名,服务端校验签名并校验该应用是否已授权访问该接口,未授权或签名错误一律拒绝。
  • 可评审:提供完整需求说明与技术方案,便于评审与后续扩展更多开放接口。

二、范围与边界

2.1 本期范围

序号 内容 说明
1 开放 API 机制 统一路径前缀 /open/api/**请求头鉴权X-App-Id、X-Timestamp、X-Sign
2 学生列表查询 提供 GET /open/api/student/list,与现有业务逻辑一致,仅鉴权方式不同
3 应用管理侧 新增/编辑应用时保存「接口授权」到 pg_app_api查询应用详情时回显已选接口
4 接口字典 pg_api_dict 中至少包含「学生列表」开放接口配置,供授权勾选与校验使用

2.2 边界(本期不做)

  • 仅实现「学生列表」一个开放接口作为示例;其他业务接口(如学校、会员等)后续按同机制扩展。
  • 不涉及 OAuth2/第三方登录;仅做「应用级」签名鉴权与接口授权。

三、用户角色与使用场景

3.1 角色

角色 说明
运营/管理员 在应用管理中创建应用、为应用勾选「学生列表」等接口授权
外部系统 使用 appCode + appSecret 对请求签名,调用 GET /open/api/student/list 获取学生列表(分页、筛选与现有一致)

3.2 典型场景

  1. 配置授权
    管理员在「应用管理」中新增应用「XX 学情系统」,保存后获得 appCode如 YY000001、appSecret32 位)。在编辑该应用时勾选「学生列表」接口授权并保存。

  2. 外部调用
    XX 学情系统在服务端使用 appCode、appSecret 生成签名,请求 GET /open/api/student/list?pageNum=1&pageSize=10,并携带请求头 X-App-Id、X-Timestamp、X-Sign。平台校验通过且该应用已授权「学生列表」后返回分页数据。

  3. 未授权/签名错误
    若未勾选「学生列表」或签名错误,返回 401/403 及明确错误信息,不返回业务数据。


四、功能需求

4.1 开放 API 鉴权与授权

  • FR-1 请求必须携带请求头:X-App-Id(应用编码)、X-Timestamp(毫秒时间戳)、X-Sign(签名)。
  • FR-2 时间戳与服务器时间差超过 5 分钟视为过期,拒绝请求。
  • FR-3 根据 X-App-Id 查询应用信息;应用不存在或已停用则拒绝。
  • FR-4 签名算法请求参数query+body 按参数名 ASCII 排序)拼接为 key1=value1&key2=value2&...&appSecret=应用密钥,再对该字符串做 MD5结果转大写与 X-Sign 比对;不一致则拒绝。
  • FR-5 请求 URI 对应的「开放接口」必须在当前应用的授权列表中(以 pg_api_dict.api_path 与 pg_app_api 关联为准),否则拒绝访问。

4.2 学生列表开放接口

  • FR-6 提供 GET /open/api/student/list,支持与现有学生列表一致的查询参数(如 studentName、studentNo、schoolId 等及分页参数pageNum、pageSize
  • FR-7 响应格式与现有管理端学生列表一致TableDataInforows、total 等),便于对接方使用。

4.3 应用管理侧

  • FR-8 新增/编辑应用时,请求体可携带接口授权标识(如 apiCodes接口编码列表保存时同步更新 pg_app_api先删该应用原有授权再按 apiCodes 插入)。
  • FR-9 查询应用详情(含列表展示)时,返回该应用已授权的接口信息(如 apiCodes 或等效),供前端勾选回显。

4.4 接口字典

  • FR-10 pg_api_dict 中至少有一条「学生列表」开放接口记录api_path 为 /open/api/student/listapi_method 为 GET供应用管理勾选与鉴权校验使用。

五、非功能需求

  • NFR-1 鉴权失败时返回 HTTP 状态码与 JSON 错误信息(如 401 签名错误、403 无权限、400 参数缺失/过期)。
  • NFR-2 授权关系变更后,建议在较短时间内生效(可为实时或短 TTL 缓存,技术方案中约定)。
  • NFR-3 文档与示例:提供开放 API 调用说明及学生列表调用示例(含签名算法与示例请求),便于对接方自测与联调。

六、验收标准

  1. 在应用管理中为某应用勾选「学生列表」并保存后,该应用使用正确签名调用 GET /open/api/student/list 可返回学生列表数据。
  2. 未勾选「学生列表」的应用调用同一接口,返回 403 无权限。
  3. 错误签名或过期时间戳,返回 401 或 400且不返回业务数据。
  4. 应用管理新增/编辑时接口授权勾选可保存并回显;列表/详情中可看到已授权接口信息。

七、附录:术语

术语 说明
appCode 应用编码,如 YY000001唯一标识一个应用
appSecret 应用密钥32 位,用于参与签名计算,需保密
接口授权 应用与 pg_api_dict 中某条 API 的关联关系,存储在 pg_app_api
开放 API /open/api/** 为前缀、使用应用签名鉴权的接口,无需用户登录