保护REST API

时间:2010-04-20 15:10:34

标签: java php web-services rest oauth

我正在开发一个PHP社交媒体Web应用程序,每个Web服务都支持各自运行REST API的Web服务。 Web服务可能会在Java中使用MySQL数据层实现,但我要做的重点是使得在不同语言/数据存储中实现模块非常容易,这取决于什么是合适的。

因此,例如,当用户通过登录表单登录应用程序时,PHP代码将连接到Web服务并POST用户名和密码以检查是否应对其进行身份验证。我通常会在此时启动会话并将其存储在会话数据存储中。

另一个例子可能是用户向另一个用户发送私人消息。该消息将被POST到私人消息传递Web服务,该服务将负责所有存储。同样,可以联系Web服务以检索用户的消息。

虽然我了解如何在Java中实现REST Web服务并在PHP中与它建立连接,但我完全不确定如何保护传递的数据并确保它是返回的用户数据。例如,如果我想获取所有用户作为私人消息,Web服务如何知道返回该用户。我可以将该用户标识符作为GET URL的一部分传递,但是当然任何旧用户都可以找出GET url并使用它来查找其他人的消息。我想也许我可以通过会话标识符和IP地址来检查会话数据存储并确保它是正确的用户?

要保护重要的数据 - 比如用户名/密码,我认为我只会通过SSL传递它。

希望这能更好地解释我的问题。

由于

4 个答案:

答案 0 :(得分:2)

查看HTTP摘要身份验证。大多数客户端应该支持它,这意味着可以将每个请求作为标头的一部分安全地传递auth详细信息,而不会干扰请求本身的有效负载。

答案 1 :(得分:1)

我认为要求OAuth是一个不错的选择。您的最终用户应该感谢其他网站不需要询问用户名和密码来访问他们的数据。就SSL而言,如果可以的话,显然值得做。你必须看看性能权衡是否可以接受。

答案 2 :(得分:0)

请记住,您的api必须模仿HTTP协议。

Http是无状态的,通过添加任何Sessions左右,你试图伪造一个“Alwaysconnected”方法。

使用LoginForm,就像我必须为每次调用发送两个请求;)

答案 3 :(得分:-1)

这些基本上是2个问题。

当隐私受到关注时,我会选择最安全的选项:通过SSL服务数据(通过HTTPS)。

就身份验证而言,有几种可能性。基本的SSL是其中之一,但带有cookie的简单登录表单可以是另一个。 (例如,ASP.Net Forms身份验证。)这完全取决于您希望如何实现身份验证机制。