1

Google's API explorer和使用使用OAuth 2.0授權請求,因爲我想在我的SPA,我看到一個YOUR_API_KEY以某種方式從登錄導出並在後續調用用於:爲什麼clientID不夠使用Google API?

https://www.googleapis.com/youtube/v3/channels?part=statistics&id=UCE5Au4LfcBHxTQR_yLbncrQ&key={YOUR_API_KEY} 

我如何得到這個密鑰?我在VueJS應用程序中從GAPI.auth2.getAuthInstance()工作。

我可以看到gapi正用於Google samples。但我只想簡單地通過此用戶的API密鑰直接呼叫fetch進行會話。我不想使用gapi.client,還是我別無選擇?

更新:在Oauth2 playground我看到它指的是客戶端機密1。我完全不理解這一點,因爲對於沒有後端的SPA,你不想存儲祕密!爲什麼不是客戶端ID和原產地夠了?

Client secret in Oauth token request

這裏是another confusing example(不使用密碼),其中apiKey一起與的clientId使用。爲什麼不是clientId就夠了,因爲它受限於原點?!

+0

如果我正確理解您的問題,您是否試圖獲得API KEY,那麼應該在您的Google Developer's Console中?這將是你的API密鑰,如果你有一個隨機的API密鑰,並且你正在嘗試獲取()數據,它將不會工作,因爲這個API密鑰將不符合Auth證書。 – aliusman

+0

我期望從GAPI.auth2對象以某種方式清楚地派生出API密鑰。即一旦用戶通過Google登錄認證/授權。我的App IIUC不應該有API控制檯的API密鑰。 – hendry

回答

2

通常,有兩種類型的OAuth流在Web上獲取access_token。一個叫做implicit flow,另一個叫做authorization code flow

對於代碼流,您需要client_secret才能與access_token交換代碼。這通常發生在服務器端。
對於隱式流程,您可以簡單地給一個client_id來獲得一個access_token,它被設計爲在客戶端工作。

您附加的屏幕截圖是OAuth流程部分,您將身份驗證代碼與access_token進行交換。因爲操場正在使用授權碼流。

你在找什麼應該是隱式流。

要在YouTube客戶端庫(或任何Google javascript客戶端庫)中實現此目的,您不需要client_secret。您可以在這裏找到一個使用Google Drive的完整示例: https://github.com/GoogleChrome/google-sign-in/blob/master/static/scripts/authorization_client.js

+0

謝謝!但是我怎麼才能獲得**訪問令牌**,因爲我不是'gapi.client'風格API的粉絲?我還通過https://github.com/google/google-api-javascript-client/issues/344 – hendry

+1

提交了一個錯誤。您可以使用「AuthResponse」獲取原始access_token。 https://developers.google.com/identity/sign-in/web/reference#gapiauth2authresponse 但最好的方法是使用客戶端庫。 – agektmr

+0

還有一個問題:需要什麼'id_token'? – hendry

相關問題