【发布时间】:2020-02-11 00:33:37
【问题描述】:
我正在为投票管理开发一个简单的 Spring Boot RESTful API。简而言之,可以创建公共投票,其他“用户”可以投票。
现在我必须确保每个客户每次投票只投票一次。因为我想防止使用HTTP Basic或JWT等常见的身份验证机制,所以我考虑了通过客户端IP地址进行授权。意味着我在数据库中存储如下实体:
public class Vote {
private Long pollId;
private Long choiceId;
private String ipAddress;
...
}
使用类似这样的方法,我可以避免身份验证和帐户管理的需要。
这是正确的方法还是有更好的方法来确保每个客户只投票一次?另外如何处理IP欺骗?希望有任何建议。
【问题讨论】:
-
当设备连接到互联网时,每次都会分配一个不同的 IP 地址(除非使用静态 IP)。您应该改用 MAC 地址等。
-
@MushifAliNawaz 你建议我们如何获取客户端的 MAC 地址?
-
@Malt 好吧,我们无法从请求中提取它。我只是建议应该使用 MAC 地址而不是 IP 地址。
-
@MushifAliNawaz 这就像提议我们使用客户端的 CPU 序列号一样。没有办法得到这些东西。
-
就像我说的,它本身并不是万无一失的,但绝大多数(善意的)用户还是主要使用他们的一个主浏览器。万无一失的唯一方法是对用户进行身份验证并将投票存储在他们的帐户中。即便如此,是什么阻止他们打开另一个?如果您使用的是 IP 地址,您甚至可能无法为移动设备用户获得唯一的 IP 地址,这可能取决于他们的网络。
标签: java spring-boot spring-mvc authorization spring-rest