1

我正在用 PHP 构建一个 REST Web 服务,旨在与 iOS 和 android 等移动设备一起使用。基本上,GET 请求用于返回带有请求结果的 JSON 数据,而 POST 和 DELETE 请求用于向服务添加数据。

基本上,我需要实现一个用户登录/身份验证系统,以便当用户请求特定于他们的数据时,比如他们自己的列表,或者他们尝试添加数据,他们需要登录。

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

4

2 回答 2

5

如果您正在构建一个真正的 REST Web 服务,那么您就不能有会话 - 即让用户登录一次,然后服务器会记住会话,并且用户在每次后续调用时都使用该会话。对于 REST 服务,服务器不会记住“状态”。

每个状态都可以通过它包含的表示和它提供的一组转换来完全理解,而转换仅限于一组统一的动作以便理解。

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

这实际上使您的工作更轻松,因为对服务器的每次调用都必须带有唯一标识符来验证用户身份。您的选项包括发送用户名/密码组合、密钥和其他参考来识别用户,或者可能两者都发送。因此,当用户“登录”时,您会记住他们的详细信息客户端(即在 web 表单中的 javascript 中,或通过您的应用程序并记住在 iPhone / Android 的本地存储中),然后在每次通话时发送这些详细信息。您可以使用 rest 调用来验证登录详细信息,但它不会返回会话。

所以用伪代码回答:

  1. HTML:用户登录。表单被 Javascript 捕获,并且用户名/密码(或其他密钥)被 javascript 记住,或者
  2. iOS / Android:用户登录。表单被代码困住,记忆在本地存储中
  3. [可选] 将用户名/密码/密钥发送到您的“WhoAmI”网络服务:如果有效,您会收到回复。如果无效,则发送错误。这可以提供即时反馈
  4. 对于其他所有调用,您还会将用户名/密码/密钥发送到您的 Web 服务:如果有效,则处理该调用,如果无效,则抛出错误。
  5. (出现错误时,您要求用户提供新凭据)。

PHP 方面很简单:每个调用都将读取:

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

显然,您也可以使用不需要身份验证的服务。这可能包括注册。

于 2012-12-04T03:30:29.840 回答
0

将 Oauth 消费者密钥和秘密捆绑到客户端应用程序。使用 HTTPS 请求的 Oauth 1 授权标头进行签名。现在,使用 oauth 库可以轻松进行签名。

对于网络应用程序,没办法。

于 2012-12-04T04:38:11.757 回答