我在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
答案 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>'