为什么客户端ID不足以使用Google API?

时间:2017-10-11 09:04:58

标签: javascript youtube single-page-application google-signin

来自Google's API explorer并在我的SPA上使用使用OAuth 2.0授权请求,我看到 YOUR_API_KEY 以某种方式来自登录并使用在随后的调用中:

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

我如何获得此密钥?我正在使用VueJS应用程序中的GAPI.auth2.getAuthInstance()工作。

我可以在Google samples中看到 gapi 。但我只想使用此用户的会话API密钥进行简单的直接fetch调用。我不想使用gapi.client,或者我别无选择?

更新:在Oauth2 playground上,我看到它指的是客户机密1。我根本不明白这一点,因为没有后端的SPA,你不想存储秘密!为什么客户ID和来源不够?

Client secret in Oauth token request

apiKey clientId 一起使用的another confusing example(未使用秘密)。为什么 clientId 不够,因为它受原点限制?!

1 个答案:

答案 0 :(得分:3)

通常,在Web上有两种类型的OAuth流来获取access_token。一个称为implicit flow,另一个称为authorization code flow

对于代码流,您需要client_secret才能使用access_token交换代码。这通常发生在服务器端 对于隐式流,您可以简单地给一个client_id来获取access_token,它被设计为在客户端工作。

您附加的屏幕截图是OAuth流程部分,您可以使用access_token与auth代码进行交换。因为游乐场正在使用授权代码流。

您正在寻找的应该是隐含的流程。

要在YouTube客户端库(或任何Google javascript客户端库)中实现此功能,您不需要client_secret。您可以在此处找到使用Google云端硬盘的完整示例: https://github.com/GoogleChrome/google-sign-in/blob/master/static/scripts/authorization_client.js