保护REST API用户创建的最佳实践

时间:2014-12-16 18:55:20

标签: spring security rest authentication

我目前正在开发一个iphone / android项目,通过REST API调用移动对话java后端服务器。

使用Spring及其身份验证系统(带有JSESSION ID令牌)

完成Java后端

我不是安全方面的专家,但我可以看到,如果没有正确实施,可能会有很多问题。

我最关心的一个问题是用户创建。 当应用创建用户时,它只是向(url.com/rest/create)

发出POST请求

如何避免服务器端恶意用户将此网址放入循环并创建数千名用户?

保护API调用的常见最佳做法是什么? Spring Authentication令牌是否足够?

谢谢!

2 个答案:

答案 0 :(得分:1)

实际上不可能阻止客户端多次调用您的服务器。恶意用户可以创建向您的服务器发送请求的脚本或应用程序。

解决方案是验证和授权对服务器的调用。您为某些用户(例如管理员)提供了创建用户的权限。您信任这些用户以正确的方式行事。在您的服务器上调用API之前,您的用户需要进行身份验证。然后,在服务器端检查用户是谁以及他/她可以做什么。

如果您仍然担心特权用户没有表现,您可以为每个用户分配允许他们执行的操作的配额。

答案 1 :(得分:1)

高科技解决方案(尽可能多的框架功能)将是

  • 首先:在要保护的实体上有一个创建者和创建日期字段(我建议使用Spring-Data-JPA审计)。
  • 第二:创建一个自定义弹簧方法(或web)表达方法,该方法能够检查当前用户在(例如)最后10分钟创建的项目数量,如果这个项目超过(例如)20,那么return false(或使它们成为方法的参数)。

然后,您可以使用该表达式(@PreAuthorize("createsNotExeced(10, 20)")

保护您的方法(或网址)

但这是高科技解决方案 - 当人们想要学习弹簧安全时,实施它们会非常紧张。 (并且您需要添加一些缓存,但这也是一个Spring功能)。


lowtech解决方案是:在用户会话中放置时间戳列表,并在用户创建新项目时向该阵列添加新项目。当最后一个(例如)20个时间戳记在最后(例如)10分钟内时,则抛出TooMuchHeavyUseRuntimeException或其他东西。