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 在失败时自动尝试再次登录来改进。
相当复杂,非常安全。你应该使你的身份验证有多复杂取决于你需要它有多安全。