【问题标题】:Mapping access token to client IP将访问令牌映射到客户端 IP
【发布时间】:2021-02-13 08:02:40
【问题描述】:

我的设置
我使用 React 和 Django 作为前端和后端。出于授权目的,我选择了 Django-rest-knox,它通过存储在数据库中的令牌工作。

我的问题
现在,如果攻击者获得了令牌(登录后存储在客户端的本地存储中),他可以做任何用户能够做的事情。令牌有一些到期时间,并且可以由用户自己销毁用户的所有令牌。但我想更安全一点。

我的解决方案
我的想法是将所有令牌映射到用于登录的(用户的)IP 地址。这样,令牌只能在用于登录的机器上使用。将在后端检查令牌与 IP 地址的关系。

我的问题

  1. 这个想法是否可行,或者这些 IP 地址的性质是否有任何破坏我的意图?
  2. 获取客户端 IP 地址的最佳方法是什么?
  3. 您认为这是一种安全的方法吗?

感谢您的帮助!

【问题讨论】:

    标签: reactjs django authentication ip-address django-rest-knox


    【解决方案1】:
    1. 这个想法可行但效率不高。主要问题是,不是每个人都使用静态 IP 地址,这会给您的用户带来很大的反馈,因为每次某些用户的 IP 地址更改(通过调制解调器重置、断电、提供商问题等)他/她/它都必须再次进行身份验证。

    2. 几乎所有后端框架和 django 都使用“HTTP_X_FORWARDED_FOR”元数据。你可以检查这个链接。 How do I get user IP address in django?

    1. 这个想法可能带有安全性,但我会给你一个更好的想法,我目前在我自己的应用程序中使用它。

    我的解决方案:刷新令牌。使用刷新令牌,每次访问令牌过期(理想情况下平均 15 分钟)用户将通过他/她/它的刷新令牌请求新的访问令牌。通过这种方式,即使攻击者获得用户的访问令牌,他/她/它也只能使用 15 分钟(您也可以设置 5-10-15-... 分钟)

    【讨论】:

    • 1- 我明白了,我只考虑过每天更改一次路由器重启或类似情况的 IP 地址。那时不这样做是有道理的。 2-完美。 3-我猜你不使用 Django-rest-knox 对吧?因为使用该软件包,您可以使用访问令牌本身进行刷新。因此,如果您拥有令牌,则可以无限期地刷新它(如果我将该设置设置为 True)。我认为使用该解决方案没有意义。还是我在这里错过了什么?
    • 我没有使用 knox,而是这个想法“因为使用该软件包,您可以使用访问令牌本身进行刷新。因此,如果您拥有该令牌,则可以无限期地刷新它(如果我将该设置设置为 True) 。”似乎是一个安全问题。无限访问令牌对您来说完全是一场噩梦,因为一旦攻击者捕获了您的访问令牌,您基本上必须更改您的密钥(如果您不使用数据库来保存您的令牌并像那样进行验证)。使用访问令牌刷新访问令牌本身就违背了保护令牌系统的整个想法。
    • 您可以查看link。您可以自己实现刷新令牌逻辑,就像我为我的应用程序所做的那样。
    • 知道了。谢谢!
    猜你喜欢
    • 2015-04-16
    • 2021-11-26
    • 2012-08-23
    • 1970-01-01
    • 2017-08-13
    • 2021-09-01
    • 1970-01-01
    • 2019-09-06
    • 2020-09-05
    相关资源
    最近更新 更多