【问题标题】:OAuth2 and Google API: access token expiration time?OAuth2 和 Google API:访问令牌过期时间?
【发布时间】:2012-11-30 19:55:09
【问题描述】:

我们有一个独立的 Java 应用程序(请参阅"Installed application"),它定期运行并使用 Google API(更新来自客户数据库/ldap/...的一些信息)。

为了访问 Google API,我们将用户名和密码存储在配置文件中,这是一个安全风险,客户不喜欢这样。所以我们想改用 OAuth2 长寿命的访问令牌

Google OAuth2 访问令牌的默认到期时间是多少?

由于我们在应用程序中只有 access token,当 access token 过期时,应用程序本身无法刷新它。

我个人认为在这种情况下实施 OAuth2 不会带来任何重大好处,但让我们关注主要问题 - 默认到期时间。

【问题讨论】:

    标签: security google-api oauth-2.0 google-api-java-client google-oauth


    【解决方案1】:

    您不应该根据访问令牌的特定生命周期来设计您的应用程序。假设它们(非常)短命。

    但是,在成功完成 OAuth2 安装应用程序流程后,您将获得一个刷新令牌。此刷新令牌永不过期,您可以根据需要使用它来交换访问令牌。保存刷新令牌,并使用它们按需获取访问令牌(应立即用于获取对用户数据的访问)。

    编辑:尽管上面有我的 cmets,但有两种简单的方法可以获取访问令牌过期时间:

    1. 当您交换刷新令牌(使用 /o/oauth2/token 端点)时,它是响应 (expires_in) 中的一个参数。 More details.
    2. 还有返回access_token剩余生命周期的API:

      https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={accessToken}

      这将返回一个包含 expires_in 参数的 json 数组,该参数是令牌生命周期中剩余的秒数。

    【讨论】:

    • 所以我只需要客户端密码用于第一次授权,然后在我获得访问权限并刷新令牌应用程序可以访问
    • @martin85 嗯,涉及多个步骤。首先获取授权码,然后将授权码交换为刷新令牌(此处是您将使用客户端密码的地方)。获得刷新令牌后,您可以将其交换为访问令牌。仅当您获取刷新令牌时,Web UI 才会显示给用户(您必须获得用户的批准才能访问他们的数据)。之后,流程不需要涉及用户。
    • @martin85 是的,假设您的应用程序可以访问 API,您可以使用 OAuth2 Service Accounts 流绕过用户 UI。有关使用 Google Analytics API 的示例,请参阅 this question。
    • 您必须将 accessType 设置为 'offline' 以获得刷新令牌
    • @Internal 现在,Google 访问令牌的 TTL 为 1 小时。
    【解决方案2】:

    google oauth2 访问令牌的默认到期日期为 1 小时。 expiry_date 以 Unix 纪元时间为单位,以毫秒为单位。如果您想以人类可读的格式阅读此内容,则只需在此处查看即可..Unix timestamp to human readable time

    【讨论】:

      猜你喜欢
      • 2019-05-25
      • 1970-01-01
      • 2016-01-04
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2016-03-05
      • 1970-01-01
      相关资源
      最近更新 更多