AppEngine nodejs:如何保护 cron URL 免受公共访问?

ben*_*ben 2 google-app-engine google-cloud-platform

https://cloud.google.com/appengine/docs/standard/python/config/cron

cron 处理程序只是 app.yaml 中定义的普通处理程序。您可以通过限制对管理员帐户的访问来阻止用户访问计划任务使用的 URL。

但是,此选项在 nodejs 中不可用。使用 nodejs 运行时保护 CRON URL 免受公共访问的推荐方法是什么?

Ron*_*mas 5

检查您的请求是否包含

X-Appengine-Cron: true
Run Code Online (Sandbox Code Playgroud)

X-Appengine-Cron 标头由 Google App Engine 内部设置。如果您的请求处理程序找到此标头,则它可以相信该请求是一个 cron 请求。如果标头出现在对您的应用程序的外部用户请求中,则它会被剥离,但来自已登录的应用程序管理员的请求除外,这些管理员被允许设置标头以进行测试。

https://cloud.google.com/appengine/docs/flexible/nodejs/scheduling-jobs-with-cron-yaml#validating_cron_requests

这可以完成,例如像这样:

app.get('/my-cron-trigger', async (req, res, next) => {
  // ensure that request comes from cron
  if (req.header('x-appengine-cron') !== 'true') {
    next();
    return;
  }

  // [your function code]
}
Run Code Online (Sandbox Code Playgroud)