【问题标题】:OAuth 2 Refresh Token ImplementationOAuth 2 刷新令牌实现
【发布时间】:2018-10-30 15:46:28
【问题描述】:

我正在尝试根据 OAuth2 规范弄清楚刷新令牌的正确流程和用法,但我完全不知道特定用例应该如何工作。

我的主要问题是,如果我从某个 OAuth 提供商(在本例中为 Google)收到刷新令牌,我有两个问题我不知道如何解决:

  1. 如何安全地保留刷新令牌,以便它可以用于获取新令牌以保持用户登录?
  2. 如何确定需要刷新令牌的用户是谁?我不能只拥有一个接收旧令牌或电子邮件地址来发布刷新令牌的端点,因为这看起来非常愚蠢。

Quick image detailing oauth flow I am referring to


我相信我正在错误地考虑一些小的实现细节,我只是不希望我的后端 API 对一些巨大的安全漏洞开放,如果我可以通过询问 StackOverflow 的乐于助人的人这实际上是如何来防止它应该工作。

我应该补充一点,似乎半合理的唯一解决方案是使用某种定时刷新机制,但这将涉及访问前端的刷新令牌,我试图避免这种情况,因为它本身似乎存在安全风险。

我担心这里的最佳实践,所以如果我的整个实现存在缺陷并且我应该使用 X 而不是 Y 或 Z,那么我也愿意接受建议。

感谢您的宝贵时间,

塞斯

【问题讨论】:

标签: oauth oauth-2.0 google-oauth refresh-token


【解决方案1】:

我如何安全地保存刷新令牌,以便它可以用于获取新令牌以保持用户登录?

您可以将刷新令牌保存在某个地方,并在需要时使用它来获取新的访问令牌。

如何确定需要刷新令牌的用户是谁?我不能只拥有一个接收旧令牌或电子邮件地址来发布刷新令牌的端点,因为这看起来非常愚蠢。

我认为您将身份验证与授权混淆了。

Oauth2 授予您的应用程序authorization 访问用户数据。当您使用刷新令牌时,不涉及身份验证,因此无法知道谁在执行该操作。 Oauth2 不会以任何方式authenticate 用户正在执行操作,oauth2 是您的应用程序代表用户使用他们的authorization 执行操作。这并不能确保执行操作时用户在场。

为此,您需要使用 Openid connect 并使用 id 令牌来识别正在使用您的应用程序的用户。

【讨论】:

  • 这似乎回答了我的问题,并且在多年被授权与身份验证混淆之后,我想我现在更清楚地理解了区别。非常感谢——我会考虑实施 Openid 解决方案。
  • 认证就是你的出生证,认证就是你的驾照
猜你喜欢
  • 1970-01-01
  • 2016-06-01
  • 2016-01-21
  • 2016-12-11
  • 2020-05-05
  • 2015-02-25
  • 2017-11-20
  • 2016-03-31
  • 2012-12-21
相关资源
最近更新 更多