基于IP地址的授权

时间:2019-10-14 11:30:15

标签: java spring-boot spring-mvc authorization spring-rest

我正在开发用于轮询管理的简单Spring Boot RESTful API。简而言之,可以创建公共民意测验,而其他“用户”可以投票支持。

现在,我必须确保每个客户每次投票只投票一次。因为我想避免使用诸如HTTP BasicJWT之类的通用身份验证机制,所以我考虑过通过客户端IP地址进行授权。意味着我将如下所示的实体存储在数据库中:

public class Vote {

    private Long pollId;
    private Long choiceId;
    private String ipAddress;

    ...
}

使用类似的方法,可以避免身份验证和帐户管理的需要。

这是正确的方法还是有更好的方法来确保每个客户只投票一次?另外如何处理IP欺骗?希望有任何建议。

1 个答案:

答案 0 :(得分:2)

  

这是正确的方法还是有更好的方法来确保每种方法   客户只投票一次?

不是。每台计算机都有唯一IP地址的想法只是部分正确。

实际上,人们拥有一个以上的设备(例如电话,工作中的计算机,家里的计算机)。而且每个设备都可以连接到不同的网络,并且每个设备都有唯一的IP。而且,IP地址更改非常频繁。断开家用调制解调器/路由器的连接几分钟,您可能会在重新连接时获得一个新的IP地址。因此,可以更改其家庭IP并再次投票。此外,许多(如果不是大多数的话)客户端位于NAT设备的后面,这意味着它们的IP已与许多其他用户共享。根据您提出的方案,一旦有人在与您相同的NAT支持下投票,其他任何人都无法投票。 最后,用户可以轻松地使用VPN,TOR和其他各种技术来进行所需的基本投票。

  

还应该如何处理IP欺骗?

如果使用TCP,则IP地址欺骗并非易事。但是,获得一个与当前IP地址不同的实际IP地址非常容易(VPN,TOR等),而且您几乎无能为力。