为不同客户端但同一用户刷新令牌轮换

问题描述 投票:0回答:2

对于刷新令牌轮换以及更新刷新令牌和访问令牌方式,我想知道,对于同一用户,他或她是否打开不同的浏览器并登录。这意味着,对于同一用户,令牌轮换会认为它被盗了。我说得对吗?

如果我不希望这种情况发生,我可以使用IP结合用户ID来识别用户吗?安全吗?我知道如果是共享IP,那就不是。

有什么是黑客无法伪造的,可以区分黑客和用户的吗?我认为 Phone 有某种设备 ID。浏览器怎么样?

oauth access-token refresh-token
2个回答
1
投票

我认为你混淆了完全不同的概念

  • Oauth - 授权。
  • 打开id connect - 登录 - 身份验证。

访问令牌和刷新令牌用于授权。用户授予您的应用程序访问其数据的权限。用户不必在场即可发生这种情况。使用访问令牌来证明用户身份并不是正确的做法。

您应该使用 open id connect 来验证用户 - 让他们登录。然后您应该获得一个包含声明的 id 令牌,这些声明之一是主题声明,它应该是您要连接到的系统上的用户 ID 。您应该使用它来识别用户。

至于黑客oauth。 (授权)

访问令牌的生命周期很短,它们将使您的应用程序在有限的时间内(通常是一个小时)访问系统。如果黑客获得了访问令牌,他们也可以在这一小时内访问系统。访问令牌是独立的。不进行进一步验证。

刷新令牌需要客户端 ID 和客户端密钥才能请求新的访问令牌。因此,黑客需要将您的客户端 ID、客户端密钥置于有效的重定向 uri 之一上。以请求新的访问令牌。这就是为什么你不应该将重定向 uri 设置为 localhost。

黑客攻击并开放ID连接。(身份验证)

就登录而言,黑客需要用户登录名和密码才能登录并取回 ID 令牌。您应该很好地假设这不是黑客,而是机器背后的用户。


0
投票

每个浏览器和设备都会有不同的刷新和访问令牌,因此不会触发令牌重用检测。如果同一浏览器有多个选项卡,那么如果一个选项卡更改了 cookie 中的刷新令牌,其他选项卡也将开始使用新的刷新令牌。

我只是将用户 id 存储在令牌中,以便能够通过 id 找到用户并检查字段

refreshTokens: [String]
代码

createAccessToken(id) {
    return jwt.sign(
      {
        id,
      },
      ACCESS_TOKEN_SECRET,
      { expiresIn: access_token_expires_in }
    )
  },
  createRefreshToken(id) {
    return jwt.sign(
      {
        id,
      },
      REFRESH_TOKEN_SECRET,
      { expiresIn: refresh_token_expires_in }
    )
  }

相关解答

© www.soinside.com 2019 - 2024. All rights reserved.