我很想听听人们在为他们的 Web 应用程序构建 RESTful(或准 RESTful)API 时采用了哪些方法。
一个实际的例子:
假设您有一个传统的基于浏览器的 Web 应用程序,它在所有表单上都使用 CSRF 保护。带有 CSRF 保护令牌的隐藏输入包含在浏览器中显示的每个表单中。提交表单后,如果此输入与服务器端版本的令牌不匹配,则该表单被视为无效。
现在假设您想将 Web 应用程序公开为 API(可能使用 JSON 而不是 HTML)。传统上,在发布 API 时,我认为事务是单方面的(这意味着 API 使用者基于已发布的 API 构建请求,而不是首先请求表单,然后使用返回的表单构建请求)。
当 CSRF 保护因素考虑在内时,“单边”方法就会失效。CSRF 保护令牌需要包含在 API 使用者发送的任何 POSTS/PUTS/DELETES 中。
我一直在想如何最好地解决这个问题。每次需要进行 API 调用时请求表单似乎很尴尬(尤其是在处理异步操作时),但我自己想到的所有其他替代方案似乎都破坏了 CSRF 保护(或者至少在其中打孔),这是不可接受的。
你们中有人对此有见解吗?
谢谢。
(并不是说它应该太重要,因为这个问题与概念和平台无关,但我正在处理传统的 LAMP 堆栈并使用 Symfony 1.4 作为我的应用程序框架。我的目标是发布一个 JSON 格式的 Web API 允许开发人员使移动/桌面应用程序与现有的 Web 应用程序配合得很好。)