跳至内容

学习记录

RODMENA LRS

即将推出

学习证据存储:发生了什么,只记录一次,原样保存。

RODMENA LRS 是一个学习记录存储(Learning Record Store):它以 xAPI 格式接收学习活动记录,原样存储,并通过标准 xAPI 查询接口返回。它通过了 ADL LRS Conformance Test Suite 中针对 xAPI 1.0.3 和 xAPI 2.0 的每一项测试。每个客户的记录在数据库内部即与其他所有客户的记录隔离。记录内容静态加密,学习者标识符仅以带密钥的假名形式存储。已存储的记录无法更改;学习者的个人数据可应请求擦除,每次擦除都会写入可检测篡改的日志。

适用对象。 需要符合规范的位置来保存学习者活动记录的学习平台和培训机构。它是一项后端服务:产品构建在其之上,并从其服务器调用它。学习者和浏览器不直接与其通信。REES 是它的第一个使用方。

状态
即将推出
所属部分
产品与服务
许可
专有。版权所有 RODMENA LIMITED,保留所有权利。
一致性
1,365 xAPI 1.0.3 一致性测试,全部通过
1,435 xAPI 2.0 一致性测试,全部通过
验证于 2026年9月23日
标签
xAPI学习记录一致性多租户数据保护审计跟踪

技术规格

面向技术评估人员陈述。没有测量值的行不予列出。

标准

xAPI 1.0.3
ADL Experience API Specification,版本 1.0.3
xAPI 2.0
IEEE 9274.1.1-2023
版本选择
按请求,通过 X-Experience-API-Version 标头。接受 1.0.x 和 2.0.x;缺失或未知版本将以 400 拒绝。
一致性测试套件
ADL LRS Conformance Test Suite,最近一次运行于 2026 年 9 月 23 日
一致性测试结果
xAPI 1.0.3:1,365 项中通过 1,365 项。xAPI 2.0:1,435 项中通过 1,435 项。
套件之外
该测试套件声明不测试的要求,每一项都由专门的检查覆盖。已识别出六项未作任何断言的套件测试,并单独予以覆盖。
设计使然
不接受 OAuth 1.0,因为它已被弃用。该服务由构建在其上的产品以服务器到服务器方式调用,不接受来自浏览器的跨源调用。

接口

资源
Statements、State、Activity Profile、Agent Profile、Activities、Agents 和 About,每个 GET 路由均支持 HEAD。
身份验证
HTTP Basic,使用服务签发的凭据。256 位密钥,仅以带密钥的验证器形式存储。未知、已禁用和已过期的凭据均收到字节完全相同的 401 响应。
备用请求语法
在 1.0.3 下受支持,在 2.0 下被拒绝,正如该规范所要求。
已签名语句
支持 RS256、RS384 和 RS512 的 JWS,在包含证书时进行验证。
附件
multipart/mixed,通过 SHA-2 哈希进行匹配。每个附件 5 MiB,每个语句正文 1 MiB,均可配置。
分页
签名的无状态游标在重启后仍然有效,每个 statements 响应都带有 xAPI 一致性标头。
幂等性
重新发送相同的 statement id 会被接受,不会产生重复。冲突的 statement id 会被拒绝,并返回 409。
速率限制
按凭据限制,并为每个客户端地址的失败身份验证设置单独的预算。

隔离与安全

租户隔离
PostgreSQL 行级安全,在所有存储租户数据的表上启用并强制执行。应用程序数据库角色不拥有任何对象,也无法绕过它。每个事务仅从已通过身份验证的凭据获取其租户。
隔离,强制执行
如果任何租户表或任何在运行时创建的分区缺少该策略,目录测试会使构建失败。
静态加密
对语句正文、文档、附件、活动定义和凭据身份采用 AES-256-GCM 加密,使用通过 HKDF-SHA256 派生的每条记录独立密钥。
密文绑定
每个密文都绑定到其所在行的身份,因此无法移动到另一行后仍能解密。
密钥保管
三把密钥保存在数据库之外,存放于权限为 0600 的密钥文件或环境变量中。没有默认密钥,缺少密钥时服务将拒绝启动。
密钥轮换
索引密钥通过离线、可续接的重新加密流程进行轮换,轮换凭据密钥会重新签发凭据。每条记录都存储写入它的密钥的 id,因此轮换无需数据迁移。
学习者标识符
仅以 HMAC-SHA256 令牌形式保存,使用每个租户独立的密钥,因此同一学习者在两个租户中会生成互不相关的令牌。没有任何列以明文保存学习者身份。
凭据作用域
xAPI 作用域集:statements/write、statements/read、statements/read/mine、state、profile、all/read 和 all。最窄的作用域只能读取该凭据自身写入的语句。
不可变性
语句和附件均为仅追加,由数据库触发器强制执行,拒绝 UPDATE、DELETE 和 TRUNCATE。唯一允许的变更是作废标记和擦除。
数据库传输
强制要求使用带完整证书和主机名验证的 TLS;否则该服务将拒绝启动。
请求审计事件
每个请求一条结构化事件,包含请求 id、凭据密钥 id、租户、方法、资源、状态、记录数、时长和筛选器名称。筛选器中的学习者值在记录日志前会被令牌化。
篡改可检测性
擦除日志采用哈希链,一条命令即可端到端验证整条链。

数据保护

擦除
一种假名化脱敏处理。在语句可能指明学习者身份的所有位置,学习者都会被替换为随机假名,自由文本回复和附件会被移除,其 State 和 Agent Profile 文档会被删除。不采用物理删除。
擦除,已记录
每次擦除都会写入哈希链日志。该命令会拒绝不匹配任何内容的擦除,因此输错学习者标识的擦除不会被误认为已完成。
备份
一旦擦除之前创建的备份过期,擦除即告完成。恢复后,会重放擦除日志。
保留期
按自然月、按实例执行。该月数据被分离,按租户导出为一个文件,然后删除。除非导出的行数匹配,否则拒绝删除。
保留期,按客户
需要单独设定保留期的客户须使用专属实例。
退出时导出
标准 xAPI 接口。客户可以以 xAPI JSON 格式(含其附件)分页浏览每条记录,并全部导出。
数据驻留
实例在合同要求的区域内运行。该服务仅需一个 PostgreSQL 数据库。

运维与验证

部署模式
共享的多租户实例,或每个客户一个专用实例。
探针可证明其能够失败
47 项行为探针中的每一项都必须先针对故意破坏的构建显示为 FAIL,其通过才会被计入,测试框架会强制执行这一点。一致性测试套件同样针对破坏的构建运行,原因相同。

功能

  • 已通过一致性测试

    通过 ADL LRS Conformance Test Suite 针对 xAPI 1.0.3 的全部 1,365 项测试,以及针对 xAPI 2.0 的全部 1,435 项测试。

  • 记录永不改变

    一旦存储,语句便无法编辑或覆盖,只能作废,正如标准所规定。

  • 设计上隔离

    每个客户的记录由数据库内强制执行的规则分隔,而不仅仅依靠应用程序代码。

  • 加密且假名化

    记录内容在静态存储时加密,学习者标识符仅以带密钥的令牌形式建立索引。

  • 带审计跟踪的擦除

    学习者的个人数据可应请求从其记录中删除,每次擦除都会记录在可检测篡改的哈希链式日志中。

  • 限定作用域的凭据

    每个凭据仅限其所需的操作,最细可至只读取其自身写入的记录。

如需文档、试点或集成,联系我们。