【问题标题】:Preserving OAuth 2.0 Token on Browser Refresh在浏览器刷新时保留 OAuth 2.0 令牌
【发布时间】:2015-06-10 17:30:53
【问题描述】:

实现一个与 OAuth 2.0 服务器对话的网站。用户登录,获取不记名令牌,一切都很好,直到他刷新页面并且不记名令牌丢失。

为了防止我的用户再次登录,我正在考虑使用刷新令牌并从服务器请求一个新的不记名令牌。这意味着我必须在本地缓存刷新令牌。

这是不受欢迎的吗?人们如何在页面刷新时存储不记名令牌?

【问题讨论】:

    标签: oauth-2.0 access-token page-refresh


    【解决方案1】:

    存储 Bearer 令牌的常用方法是在会话 cookie 中,这样令牌不会丢失,除非用户关闭浏览器。这是执行此操作的常用方法,但您可以将其存储在任何您想要的位置,例如在 HTML5 存储中。它会一直有用到过期为止。但是,将令牌包含在请求中(通常在 Authorization 标头中)很重要,因此您必须从存储它的任何位置恢复它。

    刷新令牌不是用来请求新令牌,而是在它过期之前更新它。例如,如果令牌配置为在一小时内到期,您可以使用刷新令牌在该小时内对其进行更新。如果您的令牌过期,则无法再使用刷新令牌。

    【讨论】:

      【解决方案2】:

      Refresh Token 假设在访问令牌到期时正在使用中。

      似乎当用户刷新浏览器时,会话“已死”,因此身份验证丢失。你在不同的浏览器上检查过吗?你能检查刷新后“会话”是否存在吗? (在 chrome 中很容易检查)。你用的是弹簧吗?从技术上讲,我认为您必须配置您的应用程序以使用会话...

      【讨论】:

      • 我认为这里没有会话,因为当我的用户对 OAuth 服务器进行“身份验证”时,服务器只是返回一个 JSON 对象,看起来像 { access_token: xxx, refresh_token: yyy }对我来说,我用那个 JSON 对象做什么。目前,我不将该对象存储在会话存储或任何东西中。我只是把它留在记忆中。当用户刷新页面时,该对象将丢失。人们通常会缓存他们从 OAuth 服务器返回的刷新令牌吗?
      • “人们通常会缓存”吗?好吧,我不知道大多数应用程序需要什么。但我猜这个网络应用程序希望他们的用户即使在刷新页面后也能保持登录状态。我知道在 Java 中,Spring(如果你听说过的话……)确实使用缓存并将令牌保留在会话中。
      • ...如果我的回答对您有所帮助,请不要忘记将其标记为“有帮助”(绿色 V 标记...):-) 谢谢!
      • 感谢 OhadR 的帮助。希望就该问题获得更好的指导
      • 用于开发,主要是 IE 10
      猜你喜欢
      • 2015-11-04
      • 2014-09-22
      • 2015-05-17
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 2017-01-11
      • 2014-11-22
      • 1970-01-01
      相关资源
      最近更新 更多