我想知道是否可以使用服务帐户从任何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.
该错误消息告诉我将本地主机(我目前正在使用的地方)列入白名单,但是我找不到如何将服务帐户的本地主机列入白名单。
希望我提供了足够的信息。
感谢您的回复和帮助。
答案 0 :(得分:0)
如消息所示,您需要允许localhost:8080作为来源来调用API。为了保护您和您的用户,Google限制您的OAuth 2.0应用程序使用授权域。如果您已经通过Google验证了域,则可以将任何顶级私有域用作授权域。
添加授权域后,可以使用其任何子域或页面以及任何其他关联的国家/地区代码。在添加重定向或原始URI,主页URL,服务条款URL或隐私政策URL之前,请添加授权域。
要完成此操作,请遵循these步骤:
- 在GCP控制台中,单击“ API和服务”,然后单击“ OAuth同意”屏幕。您可能必须先单击“菜单”菜单。
- 在“应用程序名称”字段中,输入G Suite Migrate,然后单击“保存”。
- 在左侧菜单中,单击“凭据”。
- 点击创建凭据,然后点击OAuth客户端ID。
- 选择Web应用程序。
- 在“名称”字段中,输入OAuth Web客户端的名称。
- 在“授权的JavaScript来源”字段中,输入用于访问G Suite迁移平台的URL(例如, http://localhost:5131。
- 点击创建。
- 记下“客户端ID”字段中显示的客户端ID。设置G Suite迁移平台时将需要它。提示:您可以 还可以从API和服务,然后从凭据访问客户端ID。
- 单击“确定”。
注意:授权过程可能需要一些时间才能完成 完成。
其他:如果您希望服务帐户能够代表用户调用API,则还需要将域范围的权限委派给服务帐户。 here对此进行了详细说明。
答案 1 :(得分:0)
您不能将服务帐户与Google JavaScript客户端库一起使用。
您应该使用Oauth2身份验证。如果必须使用服务帐户,则需要使用服务器端语言,例如node.js或python等。