【问题标题】:Mobile Web Service Authentication移动网络服务认证
【发布时间】:2012-12-04 02:36:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: php authentication service login web


    【解决方案1】:

    如果您正在构建一个真正的 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. 如果有效:处理剩余的通话 - 您拥有用户的详细信息。

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

    【讨论】:

    • 非常感谢。得到了大部分工作:) 现在,为了测试和开发,我通过直接 HTTP 使用它,并且在我们部署时将迁移到 HTTPS (SSL)。我担心的一个问题是,由于我将发送带有 POST 消息的凭据以验证用户是否可以添加内容,因此必须使用 SSL 保护这些消息。其中一些 POST 表单中包含图像和文件。我不熟悉这样做,我了解通过 SSL 编码文本/数据,因为它不是很多实际数据。但是通过 SSL 对整个图像或文件进行编码是一种正常的做法吗?
    • 如果你有ssl下的HTML,那么你还需要ssl下的图片。越来越多的页面使用 ssl'd 来防止无线网络丢失,所以现在我不用担心,除非您非常担心带宽/服务器 CPU。
    • 谢谢。看来那时我不应该担心它。 - 为了清楚起见,这不是我提供的网页,它是带有图像上传的表单数据,来自 iPhone 等移动设备。谢谢!!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      相关资源
      最近更新 更多