OAuth2中刷新令牌有啥好处[重复]

Posted

技术标签:

【中文标题】OAuth2中刷新令牌有啥好处[重复]【英文标题】:What benefits refresh tokens in OAuth2 [duplicate]OAuth2中刷新令牌有什么好处[重复] 【发布时间】:2015-01-09 01:57:42 【问题描述】:

基于The OAuth 2.0 Protocol Refresh Tokens 用于重新验证访问令牌,主要是通过将刷新令牌保存到数据库并控制它们来维持撤销。这样做有什么好处?为什么不保存Access Token 本身?

【问题讨论】:

访问令牌是短暂的,它们通常只能工作 1 小时。 【参考方案1】:

访问令牌是短暂的,它们通常只能工作 1 小时。为了获得新的访问令牌,您需要使用刷新令牌。

第 24 页

Authorization servers SHOULD issue access tokens with a limited
   lifetime and require clients to refresh them by requesting a new
   access token using the same assertion if it is still valid.
   Otherwise the client MUST obtain a new valid assertion.

通过发送刷新令牌并请求新的访问令牌,这使身份验证服务器有机会验证您仍然具有访问权限并且用户没有撤​​销您的访问权限。

在下面回答原因:

访问令牌寿命短的原因是,如果它们被泄露,攻击者使用它的时间是有限的。它通常会在一个小时内过期。

如果刷新令牌被泄露,它就毫无用处,因为黑客无权访问客户端 ID,而客户端 ID 必须同时发送到身份验证服务器以获取新的访问令牌。

【讨论】:

规范(OAuth 1.0 或 2.0)在哪里声明访问令牌“通常只能工作 1 小时”?你确定你不只是在编造那部分吗? 我是根据经验说话的。 Google 是一小时 我相信 Twitter 和 Facebook 也是一小时。这是在身份验证服务器中设置的内容,可能因服务器而异。我的经验是,我遇到的所有访问令牌都在一小时后过期。仅供参考,如果我编出答案,欢迎堆叠,我很快就没有代表了。 我实现它的一个实际原因是,您的用户不必在不存储其凭据的情况下继续登录,并且刷新令牌可让您使令牌无效(注销用户)而无需点击数据库并在每个请求中加载其整个授权票证,您只需对每个刷新请求执行此操作。此外,我没有看到客户端 ID 和秘密的意义,您将其与刷新令牌一起使用以获取新的访问令牌,在我看来,如果您能够窃取刷新令牌,您可能会获得客户端 ID 和也是秘密,使它们毫无意义。 为什么客户端不能在刷新令牌请求中只使用过期的访问令牌(当然还有额外的客户端)。服务器也可以重新发出新的访问令牌。由于请求数量相同,每次一个访问令牌过期时,客户端都会刷新令牌流 因为这不是 Oauth2 的工作方式。有一天,您可能想阅读 Oauth 的 RFC。【参考方案2】:

请参阅 Why Does OAuth v2 Have Both Access and Refresh Tokens? 以获取包含撤销注意事项的扩展答案

【讨论】:

以上是关于OAuth2中刷新令牌有啥好处[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Postman 集合中保留 OAuth2 令牌(或使用刷新令牌)?

即使访问令牌有效,也无法使用刷新令牌刷新 Google OAuth2 的访问令牌

如何以管理员用户身份撤销用户的访问令牌和刷新令牌?在 Oauth2 中使用 JWT

了解 Google OAuth2 刷新令牌

为啥我们甚至需要通过 HTTPS 刷新令牌?

刷新 OAuth2 访问令牌的正确范例