2017-10-11 107 views
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

相关问题