繁体   English   中英

使用出站http代理的Rails Omniauth

[英]Rails Omniauth with outbound http proxy

我们试图在http代理后面的Rails应用程序中使用linkedin-omniauth gem。

我已经尝试了所有我能找到的omniauth使用代理,但我无法让它工作。

以下帖子建议使用:

provider :linkedin, 'xxx', 'xxx', {
  :client_options => {
    :proxy => ENV["HTTP_PROXY"] || ENV["http_proxy"]
  }
}

哪个对我不起作用,我在源代码中没有提到“代理”。 我也试过硬编码代理。 没有成功。

这个SO帖子对我也不起作用。

我还用代理创建了net :: http的初始化程序。 这也行不通。 我已经在我的shell和bashrc中导出了代理。 在/ etc / environment中。 没有什么工作。

如何使用omniauth来使用出站代理?

---更新---

虽然下面接受的答案确实适用于Linkedin Oauth,但现在大多数宝石都依赖于Oauth2。 这消除了Net :: HTTP并引入了Faraday,它对代理/连接设置的规则有一个单独的设置:

https://github.com/simonmorley/oauth2/blob/master/lib/oauth2/client.rb#L36

为了让代理使用后来的宝石(包括流行的Facebook,Google,Github检查他们依赖的宝石),您需要在初始化程序中使用以下内容:

  provider :foursquare, 'xxx', 'xxx', {
    :client_options => {
      :connection_opts => {
        :proxy => "http://127.0.0.1:3128"
      }
    }
  }

我在一年前遇到了这个拉动请求 ,为omniauth-twitter解决了同样的问题。 如果你看一下这个修复程序 ,看起来他们所做的只是改变了这个:

require 'omniauth-oauth'
require 'multi_json'

module OmniAuth
  module Strategies
    class Twitter < OmniAuth::Strategies::OAuth
      option :name, 'twitter'
      option :client_options, {:authorize_path => '/oauth/authenticate',
                               :site => 'https://api.twitter.com'}

对此:

require 'omniauth-oauth'
require 'multi_json'

module OmniAuth
  module Strategies
    class Twitter < OmniAuth::Strategies::OAuth
      option :name, 'twitter'
      option :client_options, {:authorize_path => '/oauth/authenticate',
                               :site => 'https://api.twitter.com',
                       :proxy => ENV['http_proxy'] ? URI(ENV['http_proxy']) : nil}

我假设这设置了将通过请求头传递的oauth “proxy”值参数。 我想如果你在OmniAuth :: Strategies :: LinkedIn中分叉omniauth-linkedin repo并进行类似的更改,它应该通过代理服务器进行身份验证。 我建议改变:

require 'omniauth/strategies/oauth'

module OmniAuth
  module Strategies
    class LinkedIn < OmniAuth::Strategies::OAuth
      option :name, "linkedin"

      option :client_options, {
        :site => 'https://api.linkedin.com',
        :request_token_path => '/uas/oauth/requestToken',
        :access_token_path => '/uas/oauth/accessToken',
        :authorize_url => 'https://www.linkedin.com/uas/oauth/authenticate',
        :proxy => ENV['http_proxy'] ? URI(ENV['http_proxy']) : nil
      }

这应该将环境设置转换为OmniAuth可以使用,参数化并正确放置在请求中的URI实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM