/

如何對任何Google API進行身分驗證

如何對任何Google API進行身分驗證

Google開發人員控制台可能很難理解,這也是我有時對使用Google API持抵觸態度的原因之一。本文旨在簡化使用Google開發人員控制台對任何Google API進行身分驗證的過程。

本文將解釋如何使用Google開發人員控制台對任何Google API進行身分驗證。

開發人員控制台可能很難理解,這也是我有時對使用Google API持抵觸態度的原因之一。

現在,讓我們以一種非常簡單的方式來了解這個過程。

本指南假設您已經擁有Google帳戶。

建立新的Google API項目

如果還沒有,請建立一個新項目。

Google API控制台

從控制台點擊“建立新項目”。

建立新的API項目

為其命名,然後您將被重定向到項目控制台:

新的項目控制台

通過點擊“啟用API和服務”,添加一個API。

API庫

從列表中搜索您感興趣的API。

選擇API

並啟用該API。

啟用API

就這樣!

API已啟用

項目現在已準備就緒,您可以繼續並創建認證憑證。

創建認證憑證

有三種方法可以用來對Google API進行身分驗證:

  • OAuth 2
  • 服務到服務
  • API金鑰

API金鑰在安全性和受Google限制的範圍和使用方面較不安全。

OAuth 2是為了讓您的應用程式代表用戶請求,因此流程比實際需要的更為複雜,並且需要公開處理回調的URL。對於簡單的用途來說,這太過於複雜。

在服務到服務身分驗證模型中,應用程式直接使用服務帳戶通過使用JSON Web Token與Google API進行通信。

這是最簡單的方法,尤其適合正在構建從您的服務器到Google API(例如Node.js應用程式)的原型或應用程式。這是本文中我將談論的唯一方法。

服務到服務API

要使用此方法,您需要通過Google開發人員控制台生成JSON Key文件

還有一種選項,涉及下載.p12文件,然後使用openssl命令將其轉換為pem文件。但Google不再建議使用此方法,只需使用JSON

在項目控制台上,點擊“建立認證憑證”,然後選擇服務帳戶金鑰

選擇憑證類型

填寫表格並選擇“JSON”金鑰類型:

填寫憑證表格

就這樣!Google向您發送了一個JSON文件:

JSON文件已保存

這是此JSON文件的內容,名為JSON Key文件

1
2
3
4
5
6
7
8
9
10
11
12
{
"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 Key檔案

最簡單的方法是將JSON檔案放在可以被您的程式訪問到的地方,存儲在文件系統中。例如,我在~/dev/test下有一個測試應用程式,因此我將JSON文件放在該文件夾中,並將其重命名為auth.json。然後,在Node.js應用程式內部確保GOOGLE_APPLICATION_CREDENTIALS環境變數指向文件系統上的該文件位置。

使用包含在文件中的屬性創建JSON Web Token

1
const jwt = new google.auth.JWT(key.client\_email, null, key.private\_key, scopes)

然後將其傳遞給您進行的任何API請求。

以下是使用Google Analytics API的示例。process.env.GOOGLE_APPLICATION_CREDENTIALS最好在程式之外設置,但我在代碼中添加了它以提高清晰度:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'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提供的界面或控制台進行設置。

或者在Glitch原型中使用時,環境變數對除您之外的任何人都是隱藏的。

這種情況下,最好使用環境變數,並存儲您從JSON文件中需要的內容。在下面的示例中,我們只需要在JSON中設定的client_emailprivate_key變量,因此我們可以提取它們並將其設置為環境變數,以保持其私密性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
'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')

tags: [“Google API”, “authentication”, “Google Developers Console”]