【问题标题】:Long lived access token for Google OAuth 2.0Google OAuth 2.0 的长期访问令牌
【发布时间】:2017-06-16 19:45:13
【问题描述】:

我正在构建一个需要访问 Google 云端硬盘和 Google 表格的应用程序。我希望用户转到 https://mydomain.appspot.com/authenticate 以通过 Google 登录流程并进行身份验证,以便后端接收 Google Drive 和 Google Sheets 的访问令牌。

之后,我希望后端能够在无需用户交互的情况下访问云端硬盘和表格。例如,我希望每小时运行一次计划任务并从云端硬盘和表格中检索一些数据。我希望后端使用它在用户进行身份验证时收到的令牌。

这可能吗?我真的希望如此。我一直在寻找这里,我真的找不到任何可以帮助我的东西。 https://developers.google.com/sheets/api/guides/authorizing

后端使用 Java 开发并部署在 Google App Engine 上。

【问题讨论】:

    标签: google-sheets google-api google-drive-api google-oauth


    【解决方案1】:

    长期存在的访问令牌实际上称为刷新令牌。您需要让您的用户对您的应用程序进行身份验证,然后您将收到一个刷新令牌。然后可以在需要时使用刷新令牌从 Google 身份验证服务器请求新的访问令牌。

    注意:不要让自己被服务帐户跟踪,这不是一回事。您可以使用从 Oauth2 获得的刷新令牌运行自动化脚本,谷歌的术语只是有点混乱。

    查看官方的 google java 客户端库,它应该会为您处理大部分内容。 Using OAuth 2.0 with the Google API Client Library for Java

    【讨论】:

    • 看起来我们需要每小时刷新一次访问令牌。访问令牌的有效期为 3600 秒。
    【解决方案2】:

    您需要按照以下定义设置离线访问: https://developers.google.com/identity/protocols/OAuth2WebServer#offline

    在用户授予对所请求范围的离线访问权限后,您可以在用户离线时继续使用 API 客户端代表用户访问 Google API。客户端对象将根据需要刷新访问令牌。

    【讨论】: