![](/img/trans.png)
[英]What is the Best practice for passing access_token to make an API call
[英]How to make API requests with an access_token for a Service Account
我的最終目標是能夠從Google的API中檢索地點的詳細信息。
我需要以“ 服務帳戶”的身份進行此操作,因為這是我服務器上作為后台任務啟動的。 服務帳戶要求您將JWT (JSON Web令牌) 交換為access_token。 我終於得到了工作,並收到了一個access_token。 ew
但是現在,我不知道如何處理此access_token。
Place Details API表示key
參數是必需的,但我沒有密鑰。 只是一個access_token。 使用該值作為key
或將參數的名稱更改為access_token
均無效。
最終,我需要能夠像這樣命中一個URL:
https://maps.googleapis.com/maps/api/place/details/json?reference={MY_REFERENCE}&sensor=false&key={MY_ACCESS_TOKEN}
如何使用訪問令牌向Google Place Detail API發出請求?
更新1
仍然沒有成功,但是我認為我應該發布請求的詳細信息,以防萬一我提交給Google的內容有問題。
我正在使用JWT Ruby庫 ,這是我的聲明集的值:
{
:iss => "54821520045-c8k5dhrjmiotbi9ni0salgf0f4iq5669@developer.gserviceaccount.com",
:scope => "https://www.googleapis.com/auth/places",
:aud => "https://accounts.google.com/o/oauth2/token",
:exp => (Time.now + 3600),
:iat => Time.now.to_i
}
在我看來理智。
創建服務帳戶及其憑據
您需要創建一個服務帳戶及其憑據。 在此過程中,您需要收集三個項目,以后將用於Google Apps域范圍內的授權,並在您的代碼中用於使用服務帳戶進行授權。 這三個項目是您的服務帳戶:
•客戶端ID。
•私鑰文件。
• 電子郵件地址。
為此,您首先需要一個啟用了Google Calendar API的可運行的Google API控制台項目。 跟着這些步驟:
現在,您可以創建服務帳戶及其憑據。 跟着這些步驟:
轉到“ API訪問”部分。
通過單擊創建OAuth 2.0客戶端ID ...來創建客戶端ID。
輸入產品名稱,指定可選徽標,然后單擊“下一步”。
在詢問您的應用程序類型時,選擇服務帳戶,然后單擊創建客戶端ID。
此時,您將看到一個對話框,允許您將私鑰下載為文件(請參見下圖)。 請確保安全下載並保存該文件,因為將無法從API控制台再次下載該文件。
下載文件並關閉對話框后,您將能夠獲取服務帳戶的電子郵件地址和客戶端ID。
現在,您應該已經收集了服務帳戶的私鑰文件,客戶端ID和電子郵件地址。 您已准備好將域范圍的權限委派給您的服務帳戶。
將域范圍的權限委派給您的服務帳戶
現在需要授予您創建的服務帳戶訪問您要訪問的Google Apps域的用戶數據的權限。 Google Apps域的管理員必須執行以下任務:
轉到您的Google Apps域的控制面板。 該網址應類似於:www.google.com/a/cpanel/mydomain.com
轉到高級工具...>管理第三方OAuth客戶端訪問。
在客戶名稱字段中,輸入服務帳戶的客戶ID。
在“一個或多個API范圍”字段中,輸入應授予您的應用程序訪問權限的范圍列表(請參見下圖)。 例如,如果您需要在域范圍內訪問Google Calendar API,請輸入:www.googleapis.com/auth/calendar.readonly
單擊授權按鈕。
現在,您的服務帳戶可以為您域中的所有用戶在整個域范圍內訪問Google Calendar API,並可能在上例中列出您所列出的其他API。
以下是使用服務帳戶訪問PHP中的日歷數據的說明
服務帳戶訪問用戶日歷的一般過程如下:
•創建Google客戶端
•設置客戶端應用程序名稱
•如果您已經具有訪問令牌,請檢查它是否已過期
•如果訪問令牌已過期,則設置JWT斷言憑據並獲取新令牌
•設置客戶端ID
•基於Google客戶端創建新的日歷服務對象
•檢索日歷事件
注意:您必須保存訪問令牌,並且僅在訪問令牌即將到期時刷新它,否則您將收到一個錯誤,表明您超出了用戶在一段時間內訪問令牌的數量限制。
使用的Google PHP客戶端庫功能的說明:
客戶端對象可以訪問許多參數和方法,通過客戶端對象可以訪問以下所有內容:
創建一個新的客戶端對象:
$client = new Google_Client();
設置客戶端應用程序名稱:
$client->setApplicationName(“My Calendar App”);
如果您已經保存了一個客戶端訪問令牌,請設置它:
$client->setAccessToken($myAccessToken);
檢查訪問令牌是否已過期,是否有30秒的緩沖區,因此如果令牌設置為在30秒或更短時間內過期,則它將返回true。 訪問令牌的生命周期為一小時。 Access令牌實際上是一個JSON對象,其中包含創建時間,生存時間(以秒為單位)以及令牌本身。 因此,不會調用Google,因為令牌在本地具有所有信息來確定令牌何時到期。
$client->isAccessTokenExpired();
如果令牌已過期,或者您從未檢索過令牌,則需要設置斷言憑據才能獲取訪問令牌:
$ client-> setAssertionCredentials(新的Google_AssertionCredentials(SERVICE_ACCOUNT_NAME,array(CALENDAR_SCOPE),$ key,'notasecret',' http: //oauth.net/grant_type/jwt/1.0/bearer',$email_add));
Where:
SERVICE_ACCOUNT_NAME是之前設置的服務帳戶電子郵件地址。
For example:’abcd1234567890@developer.gserviceaccount.com’
CALENDAR_SCOPE是Google管理界面中的范圍設置。
For example: ‘https://www.googleapis.com/auth/calendar.readonly’
$ key是您在Google Apps控制台中創建項目時下載的密鑰文件的內容。 $ email_add是您要為其檢索日歷數據的用戶的Google電子郵件地址。
設置客戶端ID:$ client-setClientId(SERVICE_CLIENT_ID); 其中:SERVICE_CLIENT_ID是先前設置的服務帳戶客戶端ID。 例如:“ abcd123456780.apps.googleusercontent.com”
創建一個新的日歷服務對象:$ cal = new Google_CalendarService($ client);
可以為日歷檢索設置幾個選項。我在下面的代碼中設置了一些選項,它們在api文檔中定義。 $ optEvents = array('timeMax'=> $ TimeMax,'timeMin'=> $ TimeMin,'orderBy'=>'startTime','singleEvents'=>'True');
獲取日歷事件列表,並將上述選項傳遞給通話:
$calEvents = $cal->events->listEvents('primary', $optEvents);
循環瀏覽返回的事件列表,對頁面進行分頁,因此我們需要獲取頁面,直到列表用盡:
foreach ($calEvents->getItems() as $event) {
// get event data
$Summary = $event->getSummary();
$description = $event->getDescription();
$pageToken = $calEvents->getNextPageToken();
if ($pageToken) { // if we got a token the fetch the next page of events.
$optParams = array('pageToken' => $pageToken);
$calEvents = $cal->events->listEvents('primary', $optParams);
} else {
break;
}
}
獲取訪問令牌:
$ myAccessToken = $ client-> getAccessToken();
下次將訪問令牌保存到永久存儲中。
語言並不重要php,ruby,.net,java的過程是相同的。 api的控制台將Places API顯示為支持服務帳戶,因此應該可以訪問它。
至於使用令牌,請查看https://code.google.com/p/google-api-ruby-client/代碼,因為用法已在代碼存儲庫中明確定義。 如果訪問令牌是用於服務帳戶或單個用戶的,則使用令牌的過程是相同的。 請參見以下鏈接中標題為“調用Google API”的部分: https : //developers.google.com/accounts/docs/OAuth2InstalledApp
訪問令牌與請求一起發送到http授權標頭中。對於日歷請求,它看起來類似於以下內容:GET / calendar / v3 / calendars / primary HTTP / 1.1主機:www.googleapis.com內容長度: 0授權:OAuth ya29.AHES6ZTY56eJ0LLHz3U7wc-AgoKz0CXg6OSU7wQA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.