【问题标题】:Oath 2.0 Why have tokens expire?Oauth 2.0 为什么令牌会过期?
【发布时间】:2014-07-23 10:00:55
【问题描述】:

我正在我的服务器上创建一个 Oath 2.0 系统,允许用户从应用程序登录到他们在我的服务器上的帐户,而无需向应用程序本身提供用户名和密码。据我了解,这是 Oath 的目的,而且它似乎运行良好,该系统建立在符合所有 Oath 2.0 规范的基础上,并且功能齐全。但是我不明白为什么我必须让令牌过期......我的意思是我提供了一个刷新 uri,他们可以随时轻松地免费更新令牌(或获得一个新的有效令牌)。我看不出有任何目的,为什么不让令牌永不过期。我没有看到令牌过期的安全优势或任何目的。有人可以向我解释为什么我必须让我的令牌过期以及为什么它们不能无限期地保持良好状态吗?

【问题讨论】:

    标签: oauth-2.0


    【解决方案1】:

    我发现了它的另一个用途。当我在每次登录时将令牌存储在我的数据库中时。如果有人出于任何原因不再使用设备或删除其令牌(卸载应用程序或清除缓存)而没有正确“注销”(注销会将其从数据库中删除)。然后在数据库中存储了一个永远不会再次使用的令牌。一段时间后,这变得很麻烦,占用了数据库上的宝贵空间,并减慢了未使用令牌的查询执行速度。使用令牌过期,我可以运行一个 cron 作业,每 15 分钟左右扫描一次数据库中的过期令牌并删除它们。必须刷新令牌确实会给服务器和客户端带来一些压力,但不如可能有数百万个未使用的令牌那么大。

    【讨论】:

      【解决方案2】:

      总之,为了更安全。

      在您的问题中,您说免费更新令牌,实际上,当您刷新令牌时,您需要通过授权服务器进行身份验证(提供您的客户端凭据)。所以刷新令牌不等于访问令牌。它不能让你访问资源。

      为什么令牌会过期?

      正如OAuth 2.0 Threat Model and Security Considerations 所说:

      3.1.2。有限访问令牌生命周期

      协议参数“expires_in”允许授权服务器 (基于其政策或代表最终用户)限制 访问令牌的生命周期并将此信息传递给 客户。 此机制可用于发行短期令牌以 授权服务器认为不太安全的 OAuth 客户端,或 通过非安全通道发送令牌。

      5.1.5.2。确定到期时间

      令牌通常应在一段合理的时间后过期。 这个 补充和加强其他安全措施(例如 签名)并减少各种令牌泄漏的影响。 根据与代币泄漏相关的风险,代币可能 几分钟后过期(例如,用于支付交易)或停留 数小时内有效(例如,对联系人的读取权限)。

      【讨论】: