如何通过任何Google API进行身份验证

Google Developers Console的设置可能很复杂,这也是我有时不愿使用其中一种Google API的原因之一。本文旨在使其易于使用

本文介绍了如何使用Google Developers Console对任何Google API进行身份验证。

开发人员控制台可能很难正确设置,这也是我有时对使用一种Google API有所抵触的原因之一。

让我们以一种非常简单的方式来看一下它是如何工作的。

本指南假定您已经有一个Google帐户。

创建一个新的Google API项目

如果尚未完成,请创建一个新项目。

The Google API Dashboard

在仪表板中,单击创建一个新项目

Create a new API project

给它起一个名字,您将被重定向到项目仪表板:

The new project dashboard

通过单击添加API启用API和服务

The API library

从列表中搜索您感兴趣的API

Choose an API

并启用它

Enable an API

而已!

The API is enabled

现在该项目已准备就绪,您可以继续创建身份验证凭据。

创建身份验证凭证

使用Google API进行身份验证的方式有3种:

  • OAuth 2
  • 服务到服务
  • API密钥

API密钥的安全性较差,并且在范围和使用方面受到Google的限制。

OAuth 2旨在让您的应用代表用户发出请求,因此该过程比所需的更为复杂,并且需要公开URL来处理回调。太简单了,使用起来太复杂了。

在“服务到服务”身份验证模型中,应用程序使用服务帐户和JSON Web令牌直接与Google API对话。

这是最简单的方法,尤其是当您要构建从服务器(例如Node.js应用程序)与Google API通信的原型或应用程序时。这是我将要测试本文的一种方法。

服务到服务API

要使用此方法,您需要先生成一个JSON密钥文件通过Google Developers Console。

还有另一个选项,涉及下载.p12文件,然后将其转换为pem文件使用openssl命令。 Google不再推荐,只需使用JSON

在项目仪表板中,单击创建凭证,然后选择服务帐号密钥

Choose the type of credentials

填写表单,然后选择“ JSON”密钥类型:

Fill the form for credentials

而已! Google向您发送了一个JSON文件:

The JSON file was saved

这是此JSON文件的内容,称为JSON密钥文件

{
  "type": "service_account",
  "project_id": "...",
  "private_key_id": "...",
  "private_key": "...",
  "client_email": "...",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "..."
}

使用JSON密钥文件

最简单的方法是将JSON文件放在程序可访问的文件系统上。

例如我有一个测试应用程序~/dev/test,因此我将JSON文件放入该文件夹,并将其重命名为auth.json。然后在Node.js应用程序内部,确保GOOGLE_APPLICATION_CREDENTIALS环境变量指向文件系统上的该文件位置。

您创建一个JSON Web令牌使用文件中包含的属性:

const jwt = new google.auth.JWT(key.client_email, null, key.private_key, scopes)

并将其传递给您提出的任何API请求。

这是如何与Google Analytics(分析)API一起使用的示例。process.env.GOOGLE_APPLICATION_CREDENTIALS最好在程序外部设置,但为了清楚起见,我在源代码中添加了它:

'use strict'

const { google } = require(‘googleapis’)

const key = require(’./auth.json’) const scopes = https://www.googleapis.com/auth/analytics.readonly const jwt = new google.auth.JWT(key.client_email, null, key.private_key, scopes) const view_id = ‘XXXXXXX’

process.env.GOOGLE_APPLICATION_CREDENTIALS = ‘./auth.json’

jwt.authorize((err, response) => { google.analytics(‘v3’).data.ga.get( { auth: jwt, ids: ‘ga:’ + view_id, ‘start-date’: ‘30daysAgo’, ‘end-date’: ‘today’, metrics: ‘ga:pageviews’ }, (err, result) => { console.log(err, result) } ) })

使用环境变量

在许多情况下,这是不理想的,在这种情况下,在文件系统上拥有您的私人信息不切实际或不安全。例如,如果您使用的是Heroku,则最好避免将身份验证凭据放入存储库中,而应通过Heroku提供的界面或控制台进行设置。

还是在上面使用它的情况毛刺原型,其中环境变量对您以外的所有人都是隐藏的。

在这种情况下,最好的办法是使用环境变量,并存储JSON文件中所需的内容。在以下示例中,我们需要的是client_emailprivate_key在JSON中设置的变量,因此我们可以提取这些变量并将其设置为环境变量,以保持它们的私密性。

'use strict'

const { google } = require(‘googleapis’)

const scopes = https://www.googleapis.com/auth/analytics.readonly const jwt = new google.auth.JWT( process.env.CLIENT_EMAIL, null, process.env.PRIVATE_KEY, scopes ) const view_id = ‘XXXXXXX’

jwt.authorize((err, response) => { google.analytics(‘v3’).data.ga.get( { auth: jwt, ids: ‘ga:’ + view_id, ‘start-date’: ‘30daysAgo’, ‘end-date’: ‘today’, metrics: ‘ga:pageviews’ }, (err, result) => { console.log(err, result) } ) })

访问其他API

我在示例中使用了Google Analytics(分析)。

google对象使它可到达google.analytics('v3')

v3是API版本。

其他API可以通过类似的方式访问:

  • google.urlshortener('v1')
  • google.drive('v2')

更多服务教程: