跳转至

文档、签名与文件

柜台后面发生的一切都应留下无法抵赖的痕迹。本节涵盖具有法律效力的签名、签名中使用的个人素材,以及文件的存储与集成

电子签名(PAdES)

服务端 PDF 签名通过 eID Mongolia /v3 接口完成,共有两种形态:

形态 端点 用途
无文档(摘要) POST /api/v1/sign/initiateGET /api/v1/sign/status/{sid} 仅对 SHA-256 摘要签名——转账与交易
PDF(PAdES) POST /api/v1/sign/initGET /api/v1/sign/{id}GET /api/v1/sign/{id}/download 合同、授权书、正式文件

两者都要求公民已登录。流程是异步的:init 建立会话,轮询在公民于 eID 应用中确认前一直返回等待状态,随后 download 返回已签名的 PDF。

UI:/me/eid/sign

签名中继——面向第三方 RP

eID Mongolia 的 /v3 会以 401 拒绝没有凭据的调用。因此,持有凭据的平台站在前面充当反向代理

第三方应用 ──► https://sso.gerege.mn/rp/sign/v3/*  ──► eidmongolia /v3/*
                     (RP 凭据在此处加入)

这样第三方应用无需自行持有 eID RP 凭据即可获得签名。访问由 svc:eid-sign 授权控制——参见 API 网关

端口

在本仓库的 compose 栈中,api 监听在回环地址 127.0.0.1:8091,以便 nginx 将 /rp/sign 代理过去。应用的其余流量一律经由 web BFF。

个人素材

签名中使用的图片、姓名与印章由用户自行维护(/api/v1/me/*,写操作受 govWrite 限流器约束):

方法 路径 说明
GET PUT DELETE /api/v1/me/signature 签名图片
PUT /api/v1/me/latin-name 拉丁文姓名(用于国际文件)
PUT /api/v1/me/org-name-latin/{regNo} 机构的拉丁文名称
GET PUT DELETE /api/v1/me/orgstamp/{regNo} 机构印章

在非西里尔字母的界面语言(enzh)中优先显示拉丁文姓名;俄语属西里尔字母,因此保留蒙古文字形的姓名。

UI:/me/profile

Gerege Space——平台自有存储

基于平台自有 SFTP 的存储。每位用户分配配额,文件存放在 BASE_PATH/users/<userID>/ 之下。

方法 路径 说明
GET /api/v1/gspace 文件列表 + 用量/配额
POST /api/v1/gspace/upload 上传(超配额则拒绝)
GET /api/v1/gspace/download 下载
DELETE /api/v1/gspace 删除
  • 默认配额 2 MBGSPACE_QUOTA_BYTES)。
  • GSPACE_HOST 为空时该能力关闭,UI 卡片会相应处理。

主机密钥为必填

GSPACE_HOST_KEY 是 SFTP 主机的公钥。生产环境必须配置——否则 SFTP 连接会 fail-closed 直接报错。开发环境下留空则不做校验(存在中间人风险,仅限本地)。

第三方集成

用户可将自己的账号与第三方服务绑定。OAuth 令牌在存储层以 AES-256-GCM 加密保存;领域层只负责传递数值。

提供方 能做什么
google-drive 列出、预览与上传文件
dropbox 列出、预览与上传文件
google-meet 创建会议空间
google-login 账号绑定(属于身份认证部分)

核心端点:

方法 路径 说明
GET /api/v1/integrations 已连接的提供方
POST /api/v1/integrations 连接(OAuth 回调之后)
GET /api/v1/integrations/{provider}/token 提供方令牌(服务端)
DELETE /api/v1/integrations/{provider} 断开连接

BFF 在其之上补充了各提供方的业务端点——例如 /api/integrations/google-drive/files/api/integrations/dropbox/upload/api/integrations/google-meet/create-space 等。

INTEGRATION_ENC_KEY

加密上述令牌的密钥。切勿轮换——超级管理员 MFA 的 TOTP 密钥以及所有集成令牌都用它加密,一旦更换全部失效。

UI:/me/integrations