Node.js + Express 视频 DRM 集成
通过已认证路由、可信内容映射、同源检查及已测试的权限撤销机制,为 Express 接入 DRM-X 6.0 加密视频。
播放授权的流程
您的后端决定谁可以观看。DRM-X 提供播放授权,播放器使用该授权请求 DRM 许可证。
- 观看用户
登录您的服务并请求播放视频。
- 您的后端
检查用户的购买记录、订阅状态或其他观看权限。
- DRM-X
应用所选播放规则,返回播放配置和授权信息。
- 播放器
使用返回的授权信息,请求播放所需的 DRM 许可证。
开始之前#
先在 DRM-X 6.0 中发布加密视频并复制 Content ID,再创建具有 license-tokens:create 权限的服务器集成凭据。Site ID、Site Key 和 Access Key 保存在服务器配置中,浏览器只接收短期播放授权数据。
学习网站应使用 HTTPS。HTTP localhost 仅适合同一台电脑上的测试,HTTP 局域网地址不具备浏览器 DRM 所需的安全上下文。请使用受支持的浏览器和实际内容进行验证。
安装并挂载 Express 路由#
解压 Node.js + Express 源码 ZIP,保留相邻的 express 与 node 目录。使用 Node.js 24 或更高版本,在 express 目录运行 pnpm install --frozen-lockfile,再运行 pnpm test。本版本固定使用 Express 5.1.0。
从 express/router.mjs 导入 createDrmxRouter,将其挂载在现有会话与身份认证中间件之后。配置 publicOrigin、instanceId 和服务器凭据。identity 回调读取已认证用户,authorize 在每次页面或会话请求时查询数据库。
app.use("/drmx", createDrmxRouter({
publicOrigin: "https://learning.example.com",
instanceId: process.env.DRMX_INSTANCE_ID,
credentials: {
siteId: process.env.DRMX_SITE_ID,
siteKey: process.env.DRMX_SITE_KEY,
accessKey: process.env.DRMX_ACCESS_KEY
},
identity: req => req.user?.id,
authorize: (userId, videoId) => yourRepository.authorizedVideo(userId, videoId)
}));配置内容并嵌入播放器#
已授权数据库记录提供 enabled、title、contentId、contentType 和 policy。未付款、已到期、已停用或已撤销时返回 null。登录后打开 /drmx/videos/VIDEO_ID 即可显示嵌入播放器,其 POST 接口为 /drmx/videos/VIDEO_ID/session。浏览器不能选择用户身份或降低已保存的保护策略。
使用安全会话 Cookie 和准确配置的 HTTPS publicOrigin。会话 POST 请求必须使用 JSON 且 Origin 相同,以防止跨站提交使用 Cookie 认证的请求。两个路由都应排除共享缓存,不要添加宽松的 CORS。测试套件中的 X-Test-User 请求头仅供测试,绝不能作为正式登录方式。
验证权限变化#
已通过 8 项真实 Express HTTP 路由测试,覆盖身份认证、来源检查、格式错误与超大输入、内容绑定、服务器控制的身份与策略、播放器 HTML 转义和权限撤销。上游 DRM-X 响应使用模拟数据。上线前请验证实际登录中间件、数据库规则、部署代理和加密播放。
集成源码下载 · Universal Player Web 指南 · 授权策略 · 教育视频 DRM 保护 · Multi-DRM 保护
DRM-X 6.0