-1

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

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

如果用户存在,我计划检查我的 PHP 代码,如果不存在,则返回错误代码,但这不会重定向到登录页面。我有点失落。

4

1 回答 1

0

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

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

/myresource/尽管 RESTful 服务经常使用服务器端重定向(例如转到 my script.php?i=myresource)或其他技巧来制作更好的 URL ,但您的 apache 服务器应该不需要特殊配置。

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


要详细了解身份验证:

不幸的是,我找不到建议这一点的原始文章,并且我可能有一些错误,但这种方法是我见过的最安全的:

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

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

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

相当复杂,非常安全。你应该使你的身份验证有多复杂取决于你需要它有多安全。

于 2013-05-24T12:13:23.283 回答