Ruby on rails Rails REST API服务器:保护\u免受\u伪造选项和身份验证令牌的放置位置

Ruby on rails Rails REST API服务器:保护\u免受\u伪造选项和身份验证令牌的放置位置,ruby-on-rails,json,rest,Ruby On Rails,Json,Rest,更新(2015年8月14日):多亏@EugZol的想法,我更新了标题,因为上一个标题有误导性 我现在正在尝试构建一个Rails REST API服务器 我读过其他人的帖子,我可以使用protect\u from\u forgery with::null\u session来处理JSON请求的CSRF问题,尤其是POST请求。我认为这个null_会话只会清理会话(这对于JSON请求是无用的) 但是,如何对用户是否登录进行身份验证呢?我不想在每个请求中发送密码。所以我认为可能:空会话不安全 如果您能

更新(2015年8月14日):多亏@EugZol的想法,我更新了标题,因为上一个标题有误导性

我现在正在尝试构建一个Rails REST API服务器

我读过其他人的帖子,我可以使用
protect\u from\u forgery with::null\u session
来处理JSON请求的CSRF问题,尤其是POST请求。我认为这个null_会话只会清理会话(这对于JSON请求是无用的)

但是,如何对用户是否登录进行身份验证呢?我不想在每个请求中发送密码。所以我认为可能
:空会话
不安全

如果您能提供以下方面的信息,我将不胜感激:

  • 如果指定了
    :null\u session
    ,如何对REST API服务器执行身份验证检查
  • 如果解决方案是使用
    authenticate\u token
    ,那么我应该将该token放在JSON响应中的什么位置?客户应该把它放在哪里
  • 遵循上一条:我需要在数据库中保存该令牌的摘要吗?我想现在不会使用该会话

  • 非常感谢。

    如果您不使用cookies授权您的客户,CSRF将无法完成。它之所以有效,是因为浏览器会自动将cookie添加到请求中。例如,当您打开以下图片时:

    <img src="my.bank/withdraw_funds?to=john_doe">
    
    然后您可以在操作中使用
    @user
    。在客户端,您只需向请求参数添加
    ?token=…

    如果您使用头(这更好,至少因为您不必担心在收到请求时令牌会保存在代理服务器的日志中),您可以将
    X-Authentication-token:…
    头添加到请求中,然后修改
    ApplicationController
    ,如下所示:

    before_action :authenticate
    
    def authenticate
      @user = User.where(token: request.headers['HTTP_X_AUTHENTICATION_TOKEN']).first
    end
    

    谢谢你的回复!那真的很有帮助!我认为你们关于为什么我们应该在标题中放置令牌的解释非常清楚!再次感谢:)好吧,如果您对每个请求都强制使用SSL(不管怎样,这是个好主意),那么在请求参数中使用令牌可能会让您感到安全。不客气!考虑一下我的回答,如果你喜欢的话:当然,我会的,但是我的名声不到15:-BTW,你认为最好修改这个问题的主题:页眉是关于PopeTraceFox伪造函数的,但是我们在谈论令牌放在哪里:我们可以把它改成:如何认证您可以将其更改为“Rails作为API服务器:保护您免受伪造选项和在何处放置认证令牌”,即反映讨论的这两个主题。您好@EugZol,如果您有空,请看一下这个:)
    before_action :authenticate
    
    def authenticate
      @user = User.where(token: request.headers['HTTP_X_AUTHENTICATION_TOKEN']).first
    end