假设我开发了一个社交网站,我决定我希望应用程序的核心完全是REST。用户使用密码登录。现在,我的问题是,每个请求都需要密码和登录对(假设您需要提供您的身份)在www.site.com/index.php?p=pass&l=login
这样的网址末尾?在每次请求时我都会有点紧张。我知道我错过了一些东西......它不可能是因为任何人都可以窥探数据包并捕获密码并轻松登录。我认为在HTTPS中完成所有请求都没有意义(我读过它对资源的负担)。
所以请填写我需要了解的缺失部分。
答案 0 :(得分:12)
首先,除非您知道使用SSL对您来说太昂贵,否则请使用SSL。安全性在性能优化之前出现。
现在,关于传递用户名和密码:通常你有一个“API访问令牌”等。它实际上不是用户名/密码,但是当有人拥有它时,它们被授予了发出API请求的能力。这些可以有限或无限制的有效性。您甚至可以将令牌设为签名 - 用户使用某个密钥签署请求,然后验证签名。
但是,是的,因为每个API请求都独立于最后一个,所以您将要么必须使用HTTP基本身份验证或其等效身份,要么在每次请求时传递API令牌(或其他签名设备)。
答案 1 :(得分:6)
通常,您调用一个登录方法,该方法将生成可在所有下一个请求中重复使用的令牌。
我的建议是强制在每个请求上使用SSL,如果不可能,您应该请求安全登录并为该特定会话生成临时令牌(类似于会话ID)。
您可以在下图中看到Flickr API如何使用OAuth提供身份验证。在这种情况下,临时令牌用于请求永久令牌和令牌秘密。
取自:http://www.flickr.com/services/api/auth.oauth.html#access_token
答案 2 :(得分:1)
传统会话跟踪规则适用于REST,就像任何其他系统一样。您最好的选择是先预先登录,然后返回给客户端一个令牌,然后他们会在每次请求时传递给您(无论是查询字符串,cookie还是您有什么)。令牌索引到一些服务器站点数据存储区,其中包含所有适当的会话信息 - 特别是用户的身份等。