PHP,iOS和& Android RESTful最佳实践

时间:2013-05-24 11:52:54

标签: php apache rest

我计划用PHP开发RESTful Web应用程序,然后在iOS和Android应用程序中使用相同的Web服务。在Web应用程序登录时,我将通过ajax&amp ;;发送用户凭据。身份验证标头中的HTTPS。

  • 这真的很安全吗?
  • 在我访问的域中每个新请求和页面中都会记住此凭据吗?
  • 我是否必须在Apache服务器上配置任何内容?
  • 如果凭据错误或未设置,我必须在哪里重定向到登录页面?

如果用户存在,我打算检查我的PHP代码,如果没有,则返回错误代码但不会重定向到登录页面。我有点迷茫。

1 个答案:

答案 0 :(得分:0)

https确实很安全。或者至少它是我们拥有的最好的。当然,你必须小心总是使用https,不要通过http发送一些数据,否则你可能会开辟一条攻击途径。

执行身份验证的常用方法是登录一次,然后返回临时令牌(如传统Web应用程序中的会话),这可以用于所有后续请求。这允许您随时(或可能在设定的时间之后)撤销令牌。您可以更进一步,使用随每个请求而变化的令牌,但您将进入非常复杂的领域。

您的apache服务器不需要特殊配置,但RESTful服务通常使用服务器端重定向(例如/myresource/转到我的script.php?i=myresource)或其他技巧来实现更好的URL。

最后一点,没有在RESTful API中重定向客户端的概念(好吧,但它有所不同)。关键是每个请求执行特定任务或失败。由客户端应用程序来处理错误(例如,再次显示登录页面)


详细了解身份验证:

不幸的是我找不到原来的文章暗示这一点,我可能有一些错误,但这种方法是我见过的最安全的方法:

  • 用户通过调用特定的登录页面登录,页面生成2个长(可能是32个字符)和完全随机的令牌(称为A和B)并将它们发回(并将值存储在数据库中)。为了更好的可靠性,它可以检查数据库以确保B令牌是唯一的,但随机性通常会避免这种情况,并且没有安全风险。
  • 每次用户发出新请求时,他们都会发送两个令牌。服务器检查两者是否匹配,并且知道用户来自数据库(根据令牌B)。然后它生成一个新的随机令牌,替换A,并将其发回(无论API请求是否成功。
  • 客户端使用新令牌更新其A令牌,并可以使用它获得将来的请求。

如果服务器获得无效的B令牌,则身份验证失败。如果它获得了无效的A令牌但是获得了有效的B令牌,则会假定该帐户已被盗用并将用户注销(从数据库中删除令牌)。它还可以通过删除数据库中的值来随时将用户注销(类似于gmail的log-me-out-from-devices-feature)

缺点是如果请求丢失(在发出请求时丢失了Internet连接),则令牌将不同步并且用户将被注销。此外,单个登录会话同时运行多个请求也是不可能的。两者都可以通过允许客户端api在失败时自动尝试再次登录来改进。

相当复杂,非常安全。您应该进行身份验证的复杂程度取决于您需要的安全性。