𝗥𝗼𝗹𝗹𝗶𝗻𝗴 𝗮 𝗚𝗼𝗼𝗴𝗹𝗲 𝗦𝗲𝗿𝘃𝗶𝗰𝗲 𝗔𝗰𝗰𝗼𝘂𝗻𝘁 𝗝𝗪𝗧 𝗶𝗻 𝗡𝗼𝗱𝗲.𝗷𝘀

googleapis npm 包是使用 Google APIs 的标准方式。

它很好用,但会为你的项目增加 380KB 的体积和超过 450 个依赖项。

如果你只是为了一个 CI 脚本而需要调用单个 API,你并不需要这么重的依赖。

我编写了一个仅用 60 行代码就能检查 URL 索引状态的脚本。

它使用了三个 Node.js 内置模块:

  • crypto
  • fetch
  • URL

它不会为你的仓库增加任何额外的包。

Google 服务账号认证遵循 RFC 7523 标准。

流程如下:

  • 使用你的客户端电子邮件(client email)和私钥(private key)创建一个 JWT。
  • 将该 JWT POST 到 Google 的 token 端点。
  • 接收访问令牌(access token)。
  • 在 API 请求头中使用该令牌。

一个关键细节:请使用 webmasters 作用域(scope)。较新的 searchconsole 作用域无法用于 URL Inspection API。

你必须对 JWT 使用 Base64url 编码。标准的 Base64 需要进行三处修改:

  • 去除填充(padding)。
  • + 替换为 -
  • / 替换为 _

你从 Google Cloud 获取的私钥已经是正确的格式。你不需要外部库来对令牌进行签名。

调用 token 端点时,请记录错误响应。Google 会针对失败原因提供具体说明,例如令牌过期或缺少服务账号。

对于 API 调用本身:

  • Authorization 请求头设置为 Bearer [token]
  • 确保你的 siteUrl 与 Search Console 中的资源(property)完全匹配。
  • 在 Search Console 中将你的服务账号电子邮件添加为用户。

这种方法最适合 CI 流水线等单一任务。

如果你需要以下功能,请不要使用此方法:

  • 调用多个 Google APIs。
  • 自动刷新令牌。
  • 复杂的重试逻辑。
  • 高复杂度的生产环境服务器代码。

对于单个 CI 任务,60 行代码比 450 个依赖项更好。理解这种底层流程在库失效时也能让调试变得更容易。

来源:https://dev.to/morinaga/rolling-a-google-service-account-jwt-in-nodejs-without-the-googleapis-package-22am