将访问令牌映射到客户端 IP

Mapping access token to client IP

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

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

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

我的问题

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

感谢您的帮助!

  1. 思路可行但效率不高。主要问题是,并不是每个人都使用静态 ip 地址,这会引起用户的强烈反馈,因为每次某些用户的 ip 地址发生变化(通过调制解调器重置、断电、供应商问题等)he/she/it 都必须重新认证。

  2. 您对几乎所有后端框架以及 django 使用 'HTTP_X_FORWARDED_FOR' meta。你可以检查这个 link。 How do I get user IP address in django?

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

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