简介
支持团队的预览 API 当前返回了线上配置,维护演练也拒绝预览凭据。线上环境仍然正常工作。你的任务是在不降低维护授权要求、也不改变线上行为的前提下,恢复预览环境的边界。
本独立挑战在一台全新的虚拟机中提供一个小型 Worker、两个命名的本地环境和用于测试的合成凭据。应用引导实验中介绍的配置、密钥加载和运行时测试方法。成功标准是两个本地环境都符合下面的契约,随后删除临时服务器和密钥文件。这里的 preview 和 live 仅表示本地测试环境;本挑战不需要登录 Cloudflare,也不需要部署。
恢复预览环境隔离
当前情况
准备好的项目位于 /home/labex/project/preview-drift。系统已安装 Node 22.22.0、项目本地的 Wrangler 4.131.1 和独立的测试运行时。开发服务器尚未启动。提供的处理程序实现了公开的健康检查和合成的维护演练;故障位于预览环境的公开配置和凭据加载部分。
实验范围
操作 wrangler.jsonc、src/index.js、.dev.vars.preview、.dev.vars.live 和 .gitignore。检查处理程序和配置,找出绑定契约。两个 dotenv 文件包含不同的随机测试凭据。你可以检查它们的键名,但不要显示键值。凭据必须保留在本虚拟机中,并排除在 Git 之外。
在回环地址的 8080 端口运行 preview Wrangler 环境,在 8081 端口运行 live 环境。让同时运行的两个运行时使用不同的调试器端口。使用项目本地的普通 Wrangler 开发命令;本挑战不会创建远程资源。QUEUE_LABEL 是显示字符串,不是队列服务。
目标
两个本地环境都必须公开各自预期的身份,并且只允许使用该环境配置的凭据执行维护操作。预览环境必须与线上环境隔离,同时保留现有的公开健康检查和安全失败行为。
验收标准
- GET
/health返回状态为ok的 JSON。预览环境标识为preview,队列标识为sandbox;线上环境标识为live,队列标识为primary。 - 每个环境都通过处理程序的
MAINTENANCE_TOKEN绑定加载自己的合成凭据。两个凭据值必须不同,并且不能放在源代码或公开的 Wrangler 变量中。本地 dotenv 文件只能由虚拟机用户读取,并且必须排除在 Git 之外。 - 只有使用该环境有效的 bearer 凭据时,POST
/maintenance才返回 200,并包含operation: dry-run和对应的环境名称。缺少凭据、凭据无效或使用其他环境的凭据时,都必须返回 401,并包含error: unauthorized。 - 缺少已配置的密钥时,必须安全失败,返回 503,并包含
error: maintenance_unconfigured。GET/maintenance仍返回 405,并包含error: method_not_allowed;未知路由仍返回 404,并包含error: not_found。 - 响应和应用日志中不得包含任何凭据值。本步骤的两次检查期间,两个本地服务器都必须保持运行。不需要云端授权、部署、报告或复制成功标记。
提示
比较每个公开值的来源
阅读处理程序中的环境查找逻辑,然后将其与 wrangler.jsonc 中的命名环境对象进行比较。Wrangler 环境变量不会自动继承。运行时选择的环境,以及该环境内部的变量,是两个不同的概念。
调查 maintenance-unconfigured 响应
区分「缺少已配置的绑定」和「拒绝传入的凭据」。比较处理程序读取的绑定名称与环境专用 dotenv 文件中的键名。本地文件存在,并不代表它定义了处理程序读取的绑定。修改配置后,重新检查运行时是否已就绪。
保持线上行为和安全边界
从两个方向测试健康检查和维护操作。在一个环境中有效的令牌,在另一个环境中必须无效。提供的维护操作是演练,因此测试正确授权的请求不会修改应用数据。
清理工作区
当前情况
修复后的本地环境已经通过功能检查。它们的开发进程和合成凭据文件仍然保留在虚拟机中。
实验范围
只有本挑战在 8080 和 8081 端口启动的开发任务、.dev.vars.preview 和 .dev.vars.live 文件,以及保存这些值的 Shell 变量是临时内容。保留已修复的源代码、配置、依赖项和 LabEx 服务。
目标
保留已修复的项目,同时不再留下运行中的挑战服务器或本地密钥文件。
验收标准
- 8080 和 8081 端口都没有正在监听的开发服务器。
- 挑战项目中不再存在任何
.dev.vars*或.env*密钥文件。 - 清除用于保存合成凭据的 Shell 变量。这是学习者需要执行的清理操作;后端无法检查交互式 Shell 的状态。
- 保留无关的进程和文件。本地挑战不会创建云资源或 Cloudflare 凭据,因此无需删除。
提示
定位你启动的任务
使用 Shell 的任务列表,确认两个 Wrangler 开发进程。重启服务器后,任务编号可能会变化。必须先完成功能验证,再执行清理;如果先删除密钥,前面的检查就无法得出有效结论。
总结
你将预览身份不匹配的问题追溯到命名环境的配置值,并将维护失败的问题追溯到凭据绑定名称。修复后,预览环境与线上环境重新隔离,同时保留了线上行为、公开健康检查和服务器端授权。
通过测试缺少凭据、无效凭据、跨环境凭据和有效凭据,比只验证一次成功响应更全面地确认了安全边界。最后的清理删除了本地进程和合成密钥,同时保留了已修复的项目。

