结合使用Google服务帐户和Google API JavaScript客户端

时间:2020-02-25 16:12:42

标签: javascript api google-api google-oauth service-accounts

我想知道是否可以使用服务帐户从任何Google API请求数据,但使用以下库:https://github.com/google/google-api-javascript-client

我设法通过Google Cloud Console找到了如何将OAuth2.0凭证与该库配合使用。 但是我的真正需求是我需要使用服务帐户来获取这些数据。

这是我用来从OAuth2.0凭据中获取数据的代码:

initClient() {
      return gapi.client.init({
        apiKey: this.GSC_API_KEY, // already defined in the application
        client_id:
          "xxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
        scope:
          "https://www.googleapis.com/auth/webmasters https://www.googleapis.com/auth/webmasters.readonly",
        discoveryDocs: [
          "https://www.googleapis.com/discovery/v1/apis/webmasters/v3/rest"
        ]
      });
    },

   gapiList() {
      this.initClient()
        .then(() => {
          // Executes an API request, and returns a Promise.
          // The method name `webmasters.sites.list` comes from the API webmasters.
          return gapi.client.webmasters.sites.list();
        })
        .then(
          response => {
            console.log(response.body);
          },
          err => {
            console.error(err.details);
          }
        );
    },

以下是请求API的代码:

gapi.load("client", this.gapiList);

它确实返回了我很好的数据。

但是我的最终目的是要求我使用服务帐户。

initClient函数确实需要一个client_id才能正确加载。如果我要提供服务帐户的client_id,它确实会向我返回错误。

"Not a valid origin for the client: http://localhost:8080/ has not been whitelisted for client ID xxxxxxxxxxxxx. Please go to https://console.developers.google.com/ and whitelist this origin for your project's client ID.

该错误消息告诉我将本地主机(我目前正在使用的地方)列入白名单,但是我找不到如何将服务帐户的本地主机列入白名单。

希望我提供了足够的信息。

感谢您的回复和帮助。

2 个答案:

答案 0 :(得分:0)

如消息所示,您需要允许localhost:8080作为来源来调用API。为了保护您和您的用户,Google限制您的OAuth 2.0应用程序使用授权域。如果您已经通过Google验证了域,则可以将任何顶级私有域用作授权域。

添加授权域后,可以使用其任何子域或页面以及任何其他关联的国家/地区代码。在添加重定向或原始URI,主页URL,服务条款URL或隐私政策URL之前,请添加授权域。

要完成此操作,请遵循these步骤:

  1. 在GCP控制台中,单击“ API和服务”,然后单击“ OAuth同意”屏幕。您可能必须先单击“菜单”菜单。
  2. 在“应用程序名称”字段中,输入G Suite Migrate,然后单击“保存”。
  3. 在左侧菜单中,单击“凭据”。
  4. 点击创建凭据,然后点击OAuth客户端ID。
  5. 选择Web应用程序。
  6. 在“名称”字段中,输入OAuth Web客户端的名称。
  7. 在“授权的JavaScript来源”字段中,输入用于访问G Suite迁移平台的URL(例如, http://localhost:5131
  8. 点击创建。
  9. 记下“客户端ID”字段中显示的客户端ID。设置G Suite迁移平台时将需要它。提示:您可以 还可以从API和服务,然后从凭据访问客户端ID。
  10. 单击“确定”。

注意:授权过程可能需要一些时间才能完成 完成。

其他:如果您希望服务帐户能够代表用户调用API,则还需要将域范围的权限委派给服务帐户。 here对此进行了详细说明。

答案 1 :(得分:0)

您不能将服务帐户与Google JavaScript客户端库一起使用。

您应该使用Oauth2身份验证。如果必须使用服务帐户,则需要使用服务器端语言,例如node.js或python等。