2012-12-04 189 views
1

我正在PHP中构建REST Web服务,旨在与iOS和Android等移动设备配合使用。基本上,GET请求用于返回JSON数据和请求的结果,POST和DELETE请求用于向服务添加数据。移动Web服务身份验证

基本上,我需要实现一个用户登录/认证系统,这样当用户请求特定的数据给他们,喜欢他们自己的东西列表,或者他们尝试添加数据,他们需要登录。

我知道我需要使用SSL来保护注册和身份验证,但我想避免重新发明。我正在寻找这样做的解决方案?任何建议将不胜感激! 谢谢!

回答

5

如果您正在构建一个真正的REST Web服务,那么您不能拥有会话 - 即让用户登录一次,然后服务器记住会话以及使用该会话的用户进行每次后续呼叫。对于REST服务,服务器不会记住“状态”。

每个状态可以通过表示(一个或多个)它 包含与所述一组转换的,它提供完全理解,与 转变限制为均匀的组动作是可以理解的。

(来源:http://tech.groups.yahoo.com/group/rest-discuss/message/5841

这实际上使你的工作更容易,因为每次调用服务器必须配有一个唯一的标识符来验证用户。您的选项包括发送用户名/密码组合,密钥和其他引用以识别用户,或者可能两者都有。因此,当用户“登录”时,您可以记住他们的详细信息客户端(即以JavaScript形式或通过您的应用程序记住,并记忆在本地存储中用于iPhone/Android),然后将这些详细信息与每个呼叫一起发送。您可以使用休息电话来验证登录详细信息,但它赢了;返回会话。

因此,为了与pseduo代码回答:

  1. HTML:用户登录。表单被Javascript困住,用户名/密码(或其他密钥)被javascript记住,或者
  2. iOS/Android:用户登录。表单被代码困住并且在本地存储器中被记住
  3. [可选]发送用户名/密码/秘密密钥到您的“WhoAmI”web服务:如果有效,您会收到回复。如果无效,则发送错误。这可以提供即时反馈
  4. 与其他任何呼叫一样,您还会向您的web服务发送用户名/密码/密钥:如果有效,您处理该呼叫,如果无效,则会发出错误。
  5. (在出错时,您要求用户输入新凭据)。

PHP端很简单:每一个通话将读取:

  1. 如果没有用户名/密码/密钥:拒接来电
  2. 查找用户名/密码/密钥数据库。如果无效:拒绝呼叫
  3. 如果有效:处理剩余呼叫 - 您有用户的详细信息。

显然,你也可以使用不需要认证的服务;这可能包括注册。

+0

非常感谢。获得大部分工作:) 现在,对于测试和开发,我通过直接HTTP使用它,并在部署时迁移到HTTPS(SSL)。 我的一个担心是因为我将发送带POST消息的证书来验证用户是否可以添加内容,这些消息必须使用SSL进行保护。其中一些POST表单中包含图像和文件。我不熟悉这样做,我理解通过SSL编码文本/数据,因为它不是很多实际数据。但是,通过SSL正常实践来编码整个图像或文件? – dbrateris

+0

如果你有在ssl下提供的HTML,那么你还需要由ssl提供的图像。网页越来越普遍,以防止eves随无线网络而下降,所以现在没有什么我担心的,除非你对带宽/服务器CPU非常担心。 – Robbie

+0

谢谢。似乎我不应该担心它。 - 为了清楚起见,这不是我提供的网页,而是像iPhone一样的移动设备上传的图片数据。 谢谢! – dbrateris

0

捆绑Oauth消费者密钥和秘密的客户端应用程序。使用Oauth 1授权标头为HTTPS请求签名。通过oauth库,现在的签名很容易。

对于web应用程序,没办法。