我需要POST
从浏览器外部发出 HTTP 请求,但 Rails 后端不接受身份验证(错误 401)。我知道在这种情况下我需要传递一个 CSRF 令牌,但它不起作用。
当我通过浏览器上的表单发出请求时,它按预期工作,但是当我尝试从浏览器外部(例如使用 curl)模拟相同的请求(在标头和 cookie 方面)时,身份验证不会不工作。
两个小的改变让我在没有浏览器的情况下成功:(1)关闭protect_from_forgery
,它验证 CSRF 或(2)使用GET
而不是POST
请求。在这两种情况下,传递 cookie 就足够了。这意味着问题肯定与 CSRF 相关。
所以,我的问题是:如何在POST
不使用浏览器的情况下将受 CSRF 保护的 HTTP 发送到 Rails 服务器?
为了澄清,该过程分为三个步骤:
Login:返回一个cookie来标识会话;
新:一个
GET
返回 CSRF 令牌以供以后使用的请求(使用 cookie);创建:
POST
提交我要创建的信息的请求(使用会话 cookie 和 CSRF 令牌)。
唯一失败的是第三步。