【问题标题】:What feature does devise have for api outside of token authenticable module在令牌可验证模块之外为 api 设计了什么功能
【发布时间】:2014-04-05 08:04:34
【问题描述】:

我正在为 rails json api 使用基于令牌的身份验证。我已经在设计会话和注册控制器中重写了方法,因为设计不推荐使用 token_authenticable 模块。 api不需要这种状态的设计吗?对于我自己编写令牌身份验证这样的目的,设计是否更安全?

例如,根据设计要点,我应该使用以下代码通过令牌对用户进行身份验证:

  def authenticate_user_from_token!
    email = params[:user_email].presence
    user  = email && User.find_by_email(email)
    if user && Devise.secure_compare(user.authentication_token, params[:auth_token])
      sign_in user, store: false
    end
  end

我相信params[:auth_token] 不适用于在标头中发送令牌的 api。我也不确定sign_in user 在 json api 中的用途。我可以继续设计并继续修改它以获取令牌或遵循例如https://github.com/danahartweg/authenticatable_rest_api/ 获取自定义解决方案。

【问题讨论】:

    标签: ruby-on-rails api devise


    【解决方案1】:

    您的问题的答案取决于您想要多少安全性。使用存储在用户表中的身份验证令牌的安全级别有点低,例如用户名/密码。通过 https 连接,临时攻击者很难获得他们需要的东西,但如果他们这样做了,它很容易受到重放攻击。即使您实现了滚动密钥(经常更改它),也必须有某种方式将新密钥传达给客户端,同一攻击者可以拦截。也就是说,如果您想在标头中传递 auth_token,您可以在控制器中使用以下内容检索它:request.headers[:auth_token]

    HMAC 是一种相当安全的方法,它通过在客户端和服务器之间合并一个共享密钥以及签名请求的超时来防止重放攻击。有关 HMAC 和带有 iPhone 客户端的 Rails 服务器的更多信息,请参阅我对 this question 的回答。

    【讨论】:

    • HMAC 也可以用于服务器到浏览器客户端的通信吗?会以某种方式涉及cookie吗?
    • HMAC 用于确保真实性,但不提供任何隐私 - 即它不是加密方案。要将其用于浏览器身份验证,需要一些 Javascript。这是一个很好的描述:c2.com/cgi/wiki?HmacUserAuthentication
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2017-07-15
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多