防止重复的REST调用

时间:2016-02-04 04:40:25

标签: rest security duplicates

我正在创建一个Android应用程序,该应用程序调用基于PHP的REST API方法进行服务器端更新。

例如,要向客户添加奖励积分,我们可以使用:

http://example.com/rest/customer/add/1/20

其中1是客户ID,20是奖励积分。

我想知道如何防止对此网址的重复调用。如果由于某种原因,此URL被调用两次,则客户将获得20多个积分。没有这样的条件,客户不能在同一天获得更多积分。

另外,如何防止匿名执行此URL?

OAuth 2.0是最佳解决方案还是有更好的解决方案?

由于

1 个答案:

答案 0 :(得分:0)

解决这个问题的REST / HTTP方法会使"有条件的" POST请求奖励积分"资源。

POST 20分的请求看起来像这样:

POST /customer/1/points HTTP/1.1
If-Match: "0"
Host: ...

20

If-Match标头意味着POST只应在您尝试修改的资源仍具有指定状态时才能完成。在这种情况下,如果客户有POST分,则20分只会0。它可以被认为是optimistic locking机制。

如果If-Match前提条件失败,服务器通常应该响应错误代码412(前提条件失败)。

注意:客户的要点应该是资源。

为防止未经授权访问点,您的服务器必须实现一些身份验证机制。如果用户未经过身份验证,最简单的方法是使用401(未授权)进行响应。如果用户通过身份验证,则无权更新某些点,返回403(禁止)。