Java 基于IP地址的授权

Java 基于IP地址的授权,java,spring-boot,spring-mvc,authorization,spring-rest,Java,Spring Boot,Spring Mvc,Authorization,Spring Rest,我正在为投票管理开发一个简单的Spring Boot RESTful API。简单地说,可以进行民意调查,其他“用户”也可以投票支持 现在我必须确保每个客户每次投票只投一次票。因为我想防止使用常见的身份验证机制,如httpbasic或JWT,所以我考虑通过客户端IP地址进行授权。表示我在数据库中存储如下所示的en实体: public class Vote { private Long pollId; private Long choiceId; private Stri

我正在为投票管理开发一个简单的Spring Boot RESTful API。简单地说,可以进行民意调查,其他“用户”也可以投票支持

现在我必须确保每个客户每次投票只投一次票。因为我想防止使用常见的身份验证机制,如
httpbasic
JWT
,所以我考虑通过客户端IP地址进行授权。表示我在数据库中存储如下所示的en实体:

public class Vote {

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

    ...
}
使用类似这样的方法,我可以避免身份验证和帐户管理的需要

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

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

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

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

还有如何处理IP欺骗

如果使用TCP,IP地址欺骗就不是一件小事。然而,获得一个与当前IP地址不同的实际IP地址是非常容易的(VPN、TOR等),而且您对此无能为力

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

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

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

还有如何处理IP欺骗


如果使用TCP,IP地址欺骗就不是一件小事。但是,获取与当前IP地址不同的实际IP地址非常容易(VPN、TOR等),而且您对此无能为力。

当设备连接到internet时,每次都会为其分配不同的IP地址(除非使用静态IP)。您应该使用MAC地址等内容。@MushifAliNawaz您建议我们如何获取客户的MAC地址?@Malt嗯,我们无法从请求中提取它。我只是建议使用MAC地址,而不是IP地址。@MushifAliNawaz这就像建议我们使用客户机的CPU序列号。正如我所说,这两种方式都是不可能实现的,它本身并不是万无一失的,但绝大多数(善意的)用户主要使用他们的一个主浏览器。万无一失的唯一方法是对用户进行身份验证,并存储对其帐户的投票。即使这样,还有什么能阻止他们打开另一个?如果您使用的是IP地址,您甚至可能无法为移动设备用户获得唯一的IP地址,这可能取决于他们的网络。当设备连接到internet时,每次都会为其分配不同的IP地址(除非使用静态IP)。您应该使用MAC地址等内容。@MushifAliNawaz您建议我们如何获取客户的MAC地址?@Malt嗯,我们无法从请求中提取它。我只是建议使用MAC地址,而不是IP地址。@MushifAliNawaz这就像建议我们使用客户机的CPU序列号。正如我所说,这两种方式都是不可能实现的,它本身并不是万无一失的,但绝大多数(善意的)用户主要使用他们的一个主浏览器。万无一失的唯一方法是对用户进行身份验证,并存储对其帐户的投票。即使这样,还有什么能阻止他们打开另一个?如果您使用的是IP地址,您甚至可能无法为移动设备用户获得唯一的IP地址,这可能取决于他们的网络。您有没有其他无需用户帐户的身份验证方法?万无一失的方法?没有。但是你可以使用额外的信息,而不仅仅是IP地址。例如,一个很难快速更改的电话号码。你也可以使用浏览器指纹识别技术来尝试识别第二次返回的同一台计算机。你有没有其他没有用户帐户的身份验证方法?万无一失的方法?没有。但是你可以使用额外的信息,而不仅仅是IP地址。例如,一个很难快速更改的电话号码。您还可以使用浏览器指纹识别技术来尝试识别第二次返回的同一台计算机。