Oauth 为什么访问令牌会过期?

Oauth 为什么访问令牌会过期?,oauth,oauth-2.0,google-api,google-oauth,Oauth,Oauth 2.0,Google Api,Google Oauth,我刚刚开始使用GoogleAPI和OAuth2。当客户端授权我的应用程序时,我会得到一个“刷新令牌”和一个短暂的“访问令牌”。现在每次访问令牌过期时,我都可以将我的刷新令牌发布到Google,他们会给我一个新的访问令牌 我的问题是访问令牌过期的目的是什么?为什么不能有一个持久的访问令牌而不是刷新令牌呢 此外,刷新令牌是否过期 有关Google OAuth2工作流的更多信息,请参阅。它本质上是一种安全措施。如果您的应用受到破坏,攻击者将只能访问短期访问令牌,而无法生成新令牌 刷新令牌也会过期,但它

我刚刚开始使用GoogleAPI和OAuth2。当客户端授权我的应用程序时,我会得到一个“刷新令牌”和一个短暂的“访问令牌”。现在每次访问令牌过期时,我都可以将我的刷新令牌发布到Google,他们会给我一个新的访问令牌

我的问题是访问令牌过期的目的是什么?为什么不能有一个持久的访问令牌而不是刷新令牌呢

此外,刷新令牌是否过期


有关Google OAuth2工作流的更多信息,请参阅。

它本质上是一种安全措施。如果您的应用受到破坏,攻击者将只能访问短期访问令牌,而无法生成新令牌


刷新令牌也会过期,但它们的寿命应该比访问令牌长得多。

这在很大程度上取决于具体的实现,但总体思路是允许提供商使用长期刷新令牌发布短期访问令牌。为什么?

  • 许多提供商支持安全性非常弱的承载令牌。通过使它们短暂且需要刷新,它们限制了攻击者滥用被盗令牌的时间
  • 大规模部署不希望在每次API调用时都执行数据库查找,因此它们会发出自编码的访问令牌,该令牌可以通过解密进行验证。然而,这也意味着无法撤销这些令牌,因此它们会在短时间内发出,并且必须刷新
  • 刷新令牌需要客户端身份验证,这使其更强大。与上述访问令牌不同,它通常通过数据库查找来实现

在设计oauth2(或任何其他身份验证)系统时,有几个场景可能有助于说明访问和刷新令牌的目的以及工程权衡:

Web应用程序场景 在web应用场景中,您有两个选项:

  • 如果您有自己的会话管理,请将access_令牌和refresh_令牌都存储在会话状态服务中会话状态中的会话id中。当用户请求需要访问资源的页面时,请使用access_令牌,如果access_令牌已过期,请使用refresh_令牌获取新的页面
  • 让我们假设有人设法劫持了您的会话。唯一可能的事情就是请求你的页面

  • 如果没有会话管理,请将访问令牌放入cookie中,并将其用作会话。然后,每当用户从web服务器请求页面时,都会发送访问令牌。如果需要,您的应用服务器可以刷新访问令牌 比较1和2:

    在1中,access_token和refresh_token仅在授权服务器(在您的情况下是google)和应用服务器之间的线路上传输。这将在安全通道上完成。黑客可以劫持会话,但他们只能与您的web应用程序进行交互。在第二种情况下,黑客可以拿走访问令牌,并对用户已授予访问权限的资源形成自己的请求。即使黑客获得了访问令牌,他们也只有一个短窗口可以访问资源

    无论哪种方式,刷新令牌和clientid/secret都只有服务器知道,因此无法从web浏览器获得长期访问

    假设您正在实现oauth2,并在访问令牌上设置了一个长超时:

    1)短访问令牌和长访问令牌之间没有太大区别,因为它隐藏在应用服务器中。在2)某人可以在浏览器中获取access_令牌,然后长时间使用它直接访问用户的资源

    移动场景 在手机上,我知道有几种情况:

  • 在设备上存储clientid/secret,并让设备协调以获得对用户资源的访问权

  • 使用后端应用程序服务器保存clientid/secret并让它执行编排。使用access_令牌作为一种会话密钥,并在客户端和应用程序服务器之间传递它

  • 比较1和2

    在1)一旦设备上有了clientid/secret,它们就不再是秘密了。当然,只要用户允许,任何人都可以进行反编译,然后开始像你一样行事。access_令牌和refresh_令牌也位于内存中,可以在受损设备上访问,这意味着用户可以在不提供凭据的情况下充当您的应用程序。在这种情况下,由于刷新令牌与访问令牌位于同一位置,所以访问令牌的长度对可攻击性没有影响。在2)clientid/secret或刷新令牌被破坏。在这里,访问令牌到期时间的长度决定了黑客可以访问用户资源的时间,如果他们获得了资源的话

    有效期 在这里,它取决于您的身份验证系统对访问令牌到期时间的保护。如果它对用户特别有价值,那么它应该简短。一些不那么值钱的东西,它可以更长

    像谷歌这样的一些人不会让刷新令牌过期。有些人喜欢stackflow。到期日的决定是用户易用性和安全性之间的权衡。刷新令牌的长度与用户返回长度相关,即将刷新设置为用户返回应用程序的频率。如果刷新令牌未过期,则撤销它们的唯一方法是使用显式撤销。通常,登录不会撤销


    希望篇幅较长的帖子有用。

    除了其他回复外:

    一旦获得访问令牌,访问令牌通常与来自客户端的每个请求一起发送到受保护的资源服务器。这会导致访问令牌被盗和重放的风险(当然,假设访问令牌属于“承载者”类型(如初始RFC6750中所定义)

    现实生活中这些风险的例子:

    • 资源服务器