使用Rails安全处理Auth标记

时间:2015-05-26 14:37:14

标签: ruby-on-rails security rails-api

我正在开发一个新的rails api项目,我正在尝试获得最佳的可用性/安全性平衡。

用户将通过将用户名/密码发布到api/v1/sessions来建立会话。对于有效用户,它将创建一个身份验证令牌,这是它自己的activerecord模型,由多态关系可验证关联,如果需要,可以灵活地拥有多个用户模型。

class AuthenticationToken < ActiveRecord::Base
  before_create :digest_token
  def self.from_authenticatable(authenticatable)
    self.create(authenticatable: authenticatable, token: generate_token)
  end
end

未消化的令牌(SecureRandom.hex)通过JSON呈现回客户端以验证未来的请求。使用BCrypt和配置的工作因子,令牌被加盐并消化以存储在数据库中。

客户端将提供原始身份验证令牌和身份(可以是用户名或密码)来加载用户记录。身份验证将由authenticate_with_http_token

处理
def authenticate_token
  authenticate_with_http_token do |token, options|
    user = User.identified_by(options["identity"])
    user.authentication_tokens.any? do |auth_token|
      @current_user = user if auth_token.secure_compare(token)
    end
  end
end

Auth标记通过从设计中提升的恒定时间算法进行比较。

如果当前用户设置不成功,我会擅自渲染401。

我觉得这是相当安全的,我唯一想要做的就是在auth令牌中添加更多字段以跟踪它上次使用的位置(用户代理)以允许用户撤销某些身份验证他们喜欢的代币。

这种方法有什么重大漏洞吗?还有什么我应该考虑的吗?

0 个答案:

没有答案