学习记录
RODMENA LRS
可应要求提供用于学习的凭证存储,记录发生过的事实并精确保留。
RODMENA LRS是一个Learning Record Store。它接收xAPI格式的学习活动记录,对其原样存储,并通过标准xAPI查询接口返回。它通过了面向xAPI 1.0.3和xAPI 2.0的ADL LRS一致性测试套件中的所有测试。数据库本身将不同客户的记录相互隔离。记录内容在静态存储时经过加密。学习者标识符仅以带密钥的假名化形式存储。已存储的记录无法更改,但可以根据请求擦除学习者的个人数据,且擦除操作会被写入可检测篡改的日志中。
适用对象。 适用于需要符合规范的学习者活动记录存储库的学习平台和培训提供商。这是一项后端服务,供各类产品基于其构建并从各自服务器进行调用,学习者和浏览器不会直接与其通信。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,均可配置。
- 分页
- 经签名的无状态游标在重启后依然有效。所有语句响应均带有 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 项测试。
-
记录永不改变
一旦存储,语句便无法编辑或覆盖,只能作废,正如标准所规定。
-
设计上隔离
除应用程序代码外,客户的记录还由数据库强制执行的规则相互隔离。
-
加密且假名化
记录内容在静态存储时加密,学习者标识符仅以带密钥的令牌形式建立索引。
-
带审计跟踪的擦除
根据请求,学习者的个人数据将从其记录中移除,且擦除操作会被记录在可检测篡改的哈希链日志中。
-
限定作用域的凭据
凭据仅限于其所需的操作,甚至细化到只能读取其自身写入的记录。
如需文档、试点或集成,联系我们。