我很想知道人们在为他们的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应用程序相得益彰.)