最近使用 Cloudflare Workers 部署了 Owen 的 cronbin 项目,一个可以定时执行 curl 任务的小工具,做一些API定时调用任务很好用,比如定时激活 Render 免费账户下的项目。
部署 cronbin 后我遇到了一个权限验证的小难题,即需要记住 APIKEY。通过检查代码,我发现有三种方式可以进行权限验证:
- 查询参数验证:系统会检查 URL 中的 key 查询参数,并将其与设定好的 APIKEY 进行比对。如果不一致,就会返回一个未授权的错误提示。
- Cookie验证:程序尝试从 Cookie 中获取 API 密钥。它会搜索名为 key 的 Cookie,并对其值与 APIKEY 进行匹配。
- 授权头验证:程序检查 Authorization 头部信息,并期望它包含格式为
Bearer <APIKEY>
的值。如果收到的授权信息不符合预期格式,同样会返回未授权的错误。
由于日常使用 Surge 来管理网络请求,所以理论上可以通过 HTTP Rewrite 功能添增 Header 条目来简化操作。
增加 Cookie 完成验证
在 Surge 配置文件中,添加以下规则:
[Header Rewrite]
^https?://cronbin.yourdomain.com header-add Cookie key=YOUR_API_KEY
[MITM]
hostname = cronbin.yourdomain.com
这样做的主要目的是通过 MITM 解密后,自动向请求中添加名为 key 的 Cookie 条目,其中 YOUR_API_KEY 应替换为您部署时使用的实际 API 密钥,cronbin.yourdomain.com
应替换为您实际的 cronbin 访问链接。
这样,在浏览器中直接访问 cronbin 页面时,将能够无需输入密码即可登录,且这一设置只在个人的本地环境中生效,不会影响其他用户。
增加 Authorization 完成验证
在 Surge 配置文件中,再添加以下规则:
[Header Rewrite]
^https?://cronbin.yourdomain.com header-add Authorization "Bearer YOUR_API_KEY"
[MITM]
hostname = cronbin.yourdomain.com
与增加 Cookie 类似,需要根据自己 cronbin 部署的实际情况修改规则中的 API 密钥和域名。
开启抓包后访问 cronbin.yourdomain.com
,在 Request Header 中已经被添加了 Authorization,同时可以直接进入管理页面。
作为两种常用的HTTP请求认证机制,Surge 类的网络工具都能提供很好的支持,而且可以很好的满足需要。对于个人使用的工具类网站,都可以考虑采用这种验证形式,再维护一个 module 就能实现免密访问了,懒人福音。