无法为 Chrome 网上应用店 API 获取刷新令牌以发布 Chrome 扩展

Cannot get refresh token for Chrome Web Store API to publish Chrome extension

我正在尝试使用 Azure DevOps 中的 Chrome Web Store API 上传和发布我的 Chrome 扩展。我一直在参考官方 Google guide 但问题是它现在看起来已经过时了。我在这一步失败了

To create the client ID and client secret, click on Create New Client ID, select Installed Application, and Other under Installed application type.

执行此操作时,我在“应用程序类型”下拉列表中看不到 "Other" 选项。

我试过以下方法:

  1. 选择 Web 应用程序作为应用程序类型

有了这个,我无法获得访问代码 link:

https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.googleapis.com/auth/chromewebstore&client_id=$CLIENT_ID&redirect_uri=urn:ietf:wg:oauth:2.0:oob

结果是 "Error 400: redirect_uri_mismatch"。如果我在我的客户端 ID 设置中添加授权重定向 URI,例如 'localhost',并用它替换上面 URL 中的 'urn:ietf:wg:oauth:2.0:oob',我就可以调用授权过程并从中获取代码URL。但是当我尝试向 https://accounts.google.com/o/oauth2/token 发出 curl 请求以获取刷新令牌时,我没有收到 refresh 令牌,我只得到这个:

{
  "access_token": "",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/chromewebstore",
  "token_type": "Bearer"
}
  1. 选择 Chrome App 作为应用程序类型

这里发生的情况与之前的尝试几乎相同,除了我不必在访问代码请求中替换重定向 URI,但我也没有此应用程序类型的客户端密码,所以我只是省略它。无论如何,它会导致没有刷新令牌的相同响应。

  1. 当我在开发控制台中启用 Chrome 网上商店 API 并尝试创建新凭据时,它建议创建 API 密钥而不是客户端 ID。但它看起来不像这个 API 实际上可以使用这个键,我试过将它作为查询参数发送,作为 header,我总是用 "Login Required" 得到 401 结果信息。但是,当我尝试在 header 中发送带有(无效)令牌的请求时,我得到了有意义的响应(类似于无效凭证)。

显然我确实需要访问令牌才能使用 Chrome 网上商店 API 但是没有刷新令牌我需要手动授权我的权限,这是不可接受的,因为我需要在我的CI/CD 管道。看起来 Google 删除了仅为此类应用程序类型生成此信息的选项。

所以,问题是,我怎样才能获得刷新令牌才能真正持续部署 chrome 扩展?

好的,所以这里的技巧是向用于获取访问代码(不是令牌)的请求添加两个参数:

&access_type=offline&approval_prompt=force

所以 link 应该是:

https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.googleapis.com/auth/chromewebstore&client_id=$CLIENT_ID&redirect_uri=urn:ietf:wg:oauth:2.0:oob&access_type=offline&approval_prompt=force

并且 Google 应该在更新他们的文档方面做得更好。