有关HTTP身份验证方案的建议(使用请求标头)

时间:2011-03-02 10:39:56

标签: ruby-on-rails http authentication httpwebrequest http-headers

我在Heroku上托管了一个rails应用程序,它限制了使用代理服务的访问权限。外部服务器充当所有请求的中介并处理用户身份验证。用户通过身份验证后,服务器(我认为LDAP)会将用户名添加到请求标头中,并将其重定向到我的应用程序。

我想使用请求标头中的用户名来验证我的应用中的用户。基本上如果用户不存在,我会用这个用户名创建一个用户(不需要密码),如果没有,我只会将它们登录。我将把用户存储在我应用程序的数据库中。

我该怎么做?是否可以将Devise用于此目的?


编辑:我使用了Devise /自定义Warden策略:

# config/initializers/my_strategy.rb
Warden::Strategies.add(:my_strategy) do 
  def valid? 
    true
  end 

  def authenticate! 
    if !request.headers["my_key"]
      fail!("You are not authorized to view this site.")
      redirect!("proxy_url")
    else
      username = request.headers["my_key"]
      user = User.find_by_username(username)

      if user.nil?
        user = User.create(:username => username)
      end

      success!(user)
    end
  end
end

#config/initializers/devise.rb
config.warden do |manager|  
  manager.default_strategies(:scope => :user).unshift :my_strategy
end

我需要尽可能地证明这一点。我是否可以采取其他安全措施来确保某人无法欺骗请求标头并访问我的网站?

1 个答案:

答案 0 :(得分:3)

我认为使用设计可能会有点矫枉过正,但你可以。你只需要定义一个监狱长战略。在设计或使用只有这个目的的监护人。