OAuth 2 刷新令牌实现

OAuth 2 Refresh Token Implementation

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

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

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

Quick image detailing oauth flow I am referring to


我认为我错误地考虑了一些小的实施细节,我只是不希望我的后端 API 对一些巨大的安全漏洞开放,如果我可以通过询问 Whosebug 的帮助人员如何阻止它的话这实际上 应该 有效。

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

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

感谢您的宝贵时间,

塞斯

How do I persist the refresh token securely so that it can be used to obtain new tokens to keep a user logged in?

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

How do I determine who the user is who needs a refresh token? I can't just have an endpoint that takes in old tokens or email addresses to issue a refreshed token because that seems incredibly dumb.

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

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

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