Google開發人員控制台可能很難理解,這也是我有時對使用Google API持抵觸態度的原因之一。本文旨在簡化使用Google開發人員控制台對任何Google API進行身分驗證的過程。
本文將解釋如何使用Google開發人員控制台對任何Google API進行身分驗證。
開發人員控制台可能很難理解,這也是我有時對使用Google API持抵觸態度的原因之一。
現在,讓我們以一種非常簡單的方式來了解這個過程。
本指南假設您已經擁有Google帳戶。
建立新的Google 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 Key文件:
{
"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:
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提供的界面或控制台進行設置。
或者在Glitch原型中使用時,環境變數對除您之外的任何人都是隱藏的。
這種情況下,最好使用環境變數,並存儲您從JSON文件中需要的內容。在下面的示例中,我們只需要在JSON中設定的client_email
和private_key
變量,因此我們可以提取它們並將其設置為環境變數,以保持其私密性。
'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')