在Rails代理中间件中添加身份验证信息

时间:2014-09-02 17:57:38

标签: ruby-on-rails ruby rack

我在Rails中使用rack-proxy gem来代理对外部服务器的请求。事实是,外部端点需要身份验证。我如何从中间件提供该信息?

这是我到目前为止所拥有的:

require 'rack/proxy'

class MyProxy < Rack::Proxy
  MY_REQUEST = %r{^/path/(.*)}

  def initialize(app)
    @app = app
  end

  def call(env)
    if m = MY_REQUEST.match(env['PATH_INFO'])
      env['PATH_INFO'] = "https://otherserver.org/#{m[1]}"
      env['HTTP_HOST'] = "otherserver.org"
      #the otherserver.org endpoint requires authentication
      super env
    else
      @app.call(env)
    end
  end
end

2 个答案:

答案 0 :(得分:1)

取决于其他服务器使用的身份验证类型。如果只是普通的HTTP身份验证,您可以执行以下操作:

env['Authentication'] = 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='

值部分遵循以下规范:http://en.wikipedia.org/wiki/Basic_access_authentication#cite_ref-8

答案 1 :(得分:0)

遵循Rack规范,这给了我很好的指示 - http://rubydoc.info/github/rack/rack/master/file/SPEC

必须这样做:

env['HTTP_AUTHORIZATION'] = 'Basic <base64 username:password>'