从id_token获取Google OAuth访问令牌

时间:2018-12-15 09:26:42

标签: javascript google-authentication

我正在使用带有redirect_uri选项的Google身份验证(以避免弹出窗口)。当用户登录Chrome时,我可以获得访问令牌,但是在Safari中(例如),我不知道如何获取访问令牌。重定向查询字符串包含一个id_token,我可以使用此端点成功验证它:

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123

这给了我一些有关用户的信息,但是我真正想要的是一个访问令牌,因为我的后端API期望它。

我可以从id_token获取访问令牌吗?如果是这样,怎么做。我找不到任何例子。

说明:我不是要验证我的应用,而是从前端通过Google登录进行身份验证的用户获取id_token。

1 个答案:

答案 0 :(得分:0)

仅对用户进行身份验证

如果您不使用Google API,而仅使用令牌对用户进行身份验证,则应仅验证id_token而不使用访问令牌。 id_token是一个OpenID Connect概念,用于通知客户端(您的应用程序)有关当前登录用户的一些基本信息。

要验证id_token,您可以use the documentation在Stackoverflow上描述尽可能多的内容或this related question

代表您的用户使用Google API

但是,如果您想使用用户名使用Google API,则需要access_token,因为id_token通常不用于后端身份验证。为了获得访问令牌,用户需要授权您的应用程序才能代表他们访问Google API。如果您使用的是gapi库,则对Google API的调用过程可能大部分被隐藏了,但是它应该在某处具有访问令牌。

此Google文档描述了幕后发生的事情。

https://developers.google.com/identity/protocols/OAuth2

如果您要代表后端用户访问Google API,则可能必须遵循与前端所用过程不同的过程。授权请求中的响应类型定义使用哪个进程(这就是为什么我问使用哪种响应类型的原因)。但是gapi npm软件包背后的Javascript库似乎支持它,尽管使用它的方式可能不容易访问。

https://developers.google.com/api-client-library/javascript/reference/referencedocs#googleusergetauthresponseincludeauthorizationdata

还签出离线选项,也许这就是您想要的?如果这样做没有帮助,您仍然可以检出我之前参考的Oauth2文档页面,以获取指向其他选项/其他语言的链接以获取身份验证令牌。