【问题标题】:Refreshing OAuth2 Access Token刷新 OAuth2 访问令牌
【发布时间】:2018-04-27 08:49:07
【问题描述】:

我正在构建由后端和前端(Web)部分组成的 Web 应用程序。我想在这两部分之间引入身份验证,我的目的是为此使用 OAuth2。

前端部分将充当 OAuth 客户端,后端将充当 OAuth 提供者 - 因此后端将发布访问和刷新令牌。

我的计划当然是将刷新令牌存储在后端,并将访问令牌存储在前端(并将访问令牌与每个请求一起作为标头参数发送)。假设访问令牌持续 24 小时,刷新令牌持续 3 个月。

我的问题是我应该何时(以及如何)刷新存储在前端的访问令牌? (我问这个是因为我想在它过期之前刷新它;如果没有必要,不想让用户面对登录流程)

  1. 我是否应该在每次成功请求后返回新的访问令牌并将其存储在前端(听起来不是一个好主意)
  2. 如果现有的访问令牌即将过期,我是否应该返回新的访问令牌 - 可能需要在前端检查是否通过标头参数返回新的访问令牌,以及是否要替换旧的访问令牌。
  3. 我是否应该在前端存储访问令牌和刷新令牌,如果访问令牌已过期,则使用刷新令牌获取新令牌
  4. 还有别的吗?

我不确定最佳做法是什么。

【问题讨论】:

  • 你的资源服务器是什么?即frontend 是什么 API 将提供 access_token 以获取资源?您的 frontend 应用程序是带有服务器的 Web 应用程序,还是在浏览器中运行的单页应用程序?您将使用哪种 OAuth 授权类型?

标签: oauth-2.0 authorization single-sign-on access-token refresh-token


【解决方案1】:

No 3 是我认为最好的情况。 如果您使用 cookie 将两个令牌(access_token 和 refresh_token)存储在前端,您可以使用 getCookie 方法轻松检查请求。

检查请求中的访问令牌

  1. if (isAccessTokenExpired) 检查请求中的刷新令牌
  2. if (isRefreshTokenExpired) LoginRequiredException(custom excpetion and do something)
  3. 否则刷新令牌(延长时间或创建新令牌)和响应 setCookie
  4. 否则就继续吧。

【讨论】:

  • RefreshToken的过期时间必须长于AccessToken的
猜你喜欢
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 2021-12-17
  • 2012-08-23
  • 2017-04-20
  • 1970-01-01
相关资源
最近更新 更多