OAuth 2刷新令牌实现

时间:2018-10-30 05:01:20

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

我正在尝试根据OAuth2规范找出刷新令牌的正确流程和用法,并且我对特定用例应该如何工作完全感到困惑。

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

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

Quick image detailing oauth flow I am referring to


我相信我不正确地考虑了一些小的实现细节,并且我只是不希望我的后端API出现巨大的安全漏洞,如果我可以通过询问StackOverflow的有用人员这实际上是什么来阻止它的话应该可以工作。

我应该补充一点,似乎唯一可行的解​​决方案是使用某种定时的刷新机制,但这将涉及对前端的刷新令牌的访问,我试图避免这种情况,因为它本身看起来像安全隐患。

我担心这里的最佳做法,因此,如果我的整个实现存在缺陷,并且我应该使用X而不是Y或Z,那么我也乐于接受建议。

感谢您的时间,

Ses

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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

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

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