如何在Google OAuth2中获得用户登录并同意后的访问令牌和刷新令牌

How to get access token and refresh token after user login and consent in Google OAuth2?

本文关键字:访问令牌 令牌 刷新 登录 Google OAuth2 用户      更新时间:2023-09-26

我想通过Google API导入Gmail用户的联系人。

我有以下内容:

  1. 使用Client secret and key获取授权的url。这是用户访问以允许我的应用程序访问的url。

  2. 授权的url重定向到应用程序设置中指定的重定向uri。

  3. 我在url中有一个查询参数code,我猜这是文档在这里说的授权代码。

问题:

如果可能的话,我想交换这个代码以获得access tokenrefresh tokenjavascript。但我在javascript中看不到这部分的任何文档。

在我的服务器端,我这样做是为了获得authorized url:

token = gdata.gauth.OAuth2Token(client_id=settings.GMAIL_CLIENT_ID,
                                client_secret=settings.GMAIL_API_KEY,
                                scope=scope, user_agent=user_agent)
auth_url = token.generate_authorize_url(redirect_uri=redirect_uri)

然后将用户重定向到CCD_ 9。现在,一旦用户允许请求的权限,他们就会使用查询参数code重定向回我的网站。我想从这里使用javascript来获得access token

另一种选择是,一旦用户被重定向到我的网站,就在服务器端获得access token,并将其与响应一起返回给他,但我真的不想这样做。

简短回答:如果您想使用OAuth2客户端身份验证,则使用了错误的文档。

现在是细节。

OAuth2有4种授权类型:

  1. 授权代码
  2. 隐式
  3. 资源所有者密码凭据
  4. 客户端凭据

如果你想要更多的细节,你可以阅读这篇很好的文章并进行解释。

您已经指出OAuth2 for Web Servers的Google文档,它符合授权代码类型。它依赖于SSL上的Web服务器数据交换,因为它涉及到client_secret的交换。

也就是说,如果您尝试使用JavaScript执行POST请求以获取access_token,那么您将暴露client_secret,因为它是POST调用中的必需参数。

如果您想尝试在不使用服务器端代码的情况下请求access_token,则需要使用隐式授予类型。

您可以在Using OAuth 2.0 for Client side Applications 中找到隐式授权类型的Google文档