15

http プロキシの背後にある Rails アプリケーションで、linkedin-omniauth gem を使用しようとしています。

omn​​iauth でプロキシを使用できるようにできる限りのことを試しましたが、機能させることができません。

次の投稿では、次の使用を提案しています。

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

これは私にはうまくいきません。ソースに「プロキシ」についての言及はありません。また、プロキシのハードコーディングも試みました。失敗。

このSO投稿は私にとってもうまくいきません。

また、プロキシを使用して net::http の初期化子を作成しました。それもうまくいきません。シェルとbashrcでプロキシをエクスポートしました。そして /etc/environment にあります。何も機能していません。

omn​​iauth でアウトバウンド プロキシを使用するにはどうすればよいですか?

- - アップデート - -

以下の受け入れられた回答は実際に Linkedin Oauth で機能しますが、ほとんどの gem は現在 Oauth2 に依存しています。これにより、Net::HTTP が廃止され、プロキシ/接続設定のルールに別のセットを持つ Faraday が導入されます。

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

プロキシを後の gem (人気のある Facebook、Google、Github を含めて、それらが依存している gem を確認) で動作させるには、初期化子で次を使用する必要があります。

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

1 に答える 1

2

omn​​iauth-twitter の同じ問題を修正した 1 年前のこのプルリクエストに出くわしました。fixを見ると、彼らが行ったのはこれを変更しただけのようです:

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 「プロキシ」値パラメーターが設定されると思います。omn​​iauth-linkedin リポジトリをフォークしてOmniAuth::Strategies::LinkedInに同様の変更を加えると、プロキシ サーバー経由で認証されるはずです。次のような変更を提案します。

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
      }

これにより、環境設定が URI インスタンスに変換され、OmniAuth が消費、パラメータ化、およびリクエストに適切に配置できるようになります。

于 2014-01-17T07:10:37.297 に答える