# Node.js + Express 视频 DRM 集成 通过已认证路由、可信内容映射、同源检查及已测试的权限撤销机制,为 Express 接入 DRM-X 6.0 加密视频。 播放授权的流程 您的后端决定谁可以观看。DRM-X 提供播放授权,播放器使用该授权请求 DRM 许可证。 - 01**观看用户** 登录您的服务并请求播放视频。 - 02**您的后端** 检查用户的购买记录、订阅状态或其他观看权限。 - 03**DRM-X** 应用所选播放规则,返回播放配置和授权信息。 - 04**播放器** 使用返回的授权信息,请求播放所需的 DRM 许可证。 您的后端判断用户是否有权观看,DRM-X 执行签名授权中的播放策略。加密媒体与 DRM 许可证通过各自的服务传送给播放器。 ## 开始之前[#](#requirements) 先在 DRM-X 6.0 中发布加密视频并复制 Content ID,再创建具有 license-tokens:create 权限的服务器集成凭据。Site ID、Site Key 和 Access Key 保存在服务器配置中,浏览器只接收短期播放授权数据。 学习网站应使用 HTTPS。HTTP localhost 仅适合同一台电脑上的测试,HTTP 局域网地址不具备浏览器 DRM 所需的安全上下文。请使用受支持的浏览器和实际内容进行验证。 ## 安装并挂载 Express 路由[#](#install) 解压 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 在每次页面或会话请求时查询数据库。 [下载 Node.js + Express 源码](https://docs.drm-x.com/downloads/integrations/20260921.4/drm-x6-nodejs-express-integration-example-20260921.4-25298b03f985-source.zip) ``` 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) })); ``` ## 配置内容并嵌入播放器[#](#mapping) 已授权数据库记录提供 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 请求头仅供测试,绝不能作为正式登录方式。 ## 验证权限变化[#](#verify) 已通过 8 项真实 Express HTTP 路由测试,覆盖身份认证、来源检查、格式错误与超大输入、内容绑定、服务器控制的身份与策略、播放器 HTML 转义和权限撤销。上游 DRM-X 响应使用模拟数据。上线前请验证实际登录中间件、数据库规则、部署代理和加密播放。 [集成源码下载](https://docs.drm-x.com/zh-Hans/integrations/source-downloads) · [Universal Player Web 指南](https://docs.drm-x.com/zh-Hans/sdk/web) · [授权策略](https://docs.drm-x.com/zh-Hans/license-service/policies) · [教育视频 DRM 保护](https://multi-drm.drm-x.com/zh-Hans/solutions/education) · [Multi-DRM 保护](https://multi-drm.drm-x.com/zh-Hans/products/multi-drm)