如果 jwt 被盗,将用户的 public IP 保存在我的 API 中是否可行?

is it feasible to save the public IP of the user in my API in case of a thef of a jwt?

我在考虑如何保护我的 API 并防止令牌被盗影响我的用户。我认为如果攻击者设法窃取令牌并被具有不同 IP 的人使用,那么保存我的用户 IP 是个好主意。我将使用中间件或函数来验证它是否在用户 ip 列表中,如果不在,我将拒绝他的令牌,然后在前端询问您的凭据。如果凭据正确,我将覆盖 IP 或将其存储为新 IP。

我不明白你所说的“可行”是什么意思。是的,你想做就做。

但是,依赖用户的 IP 地址不变并在每次更改时强制他们重新进行身份验证存在很多潜在问题。

1.移动设备。 当移动设备在蜂窝网络上移动时,它们的 IP 地址可以合法地更改。

2。连接到不同网络(例如 WiFi)的移动设备。 随着您的 phone 从在车内和蜂窝网络上转变为在家中和在 WiFi 网络上,phone 连接到您的服务的 IP 地址将会改变。

3。 NAT 在某些防火墙后面。 几乎每个用户(甚至家庭用户)都通过 NAT 设备,您看到的 IP 地址是网关的 IP 地址,而不是实际用户的 IP 地址。在较大的公司网络中,网关 IP 地址可能并不总是相同的。并且,多个不同的用户可能看起来来自同一个网关 IP 地址,因此用户和 IP 地址之间不一定存在一对一的对应关系。


一般来说,您应该只对传输 JWT 的所有连接使用 https,这样中间人攻击窃取 JWT 的风险很小。用户自己需要保护自己的 JWT 本地存储。

许多现代服务使用的一种方法是 fingerprint 本地设备通过记录其具有的一组特征,这些特征甚至可能包括一些其他 cookie 的存在以及许多其他浏览器特征。然后,只要指纹发生重大变化,您就需要重新进行身份验证。您会看到许多银行和航空公司网站都在做类似的事情。这里的想法是,即使凭据被盗,当攻击者使用凭据时,指纹也不太可能匹配。