Oauth客户端与门卫提供商背后的基本身份验证

时间:2018-05-30 17:29:07

标签: ruby heroku omniauth basic-authentication

我们正在主应用程序上设置一个门卫提供程序,以便在某些应用程序上启用Oauth2身份验证。我们的生产环境一切正常。

在另一个故事的登台环境中,因为我们的登台应用程序支持基本身份验证:

{{1}}

这意味着Oauth端点必须通过此基本身份验证。这是Oauth客户端配置:

{{1}}

但Oauth似乎无法解析URI,包括,因为我在尝试获取凭据时收到以下错误:

{{1}}

如果Oauth服务器支持此类身份验证,我无法为Omniauth或Omniauth :: Oauth2提供基本身份验证凭据。

另一种方法是将登台Oauth服务器上的登台客户端的IP地址列入白名单。当我们使用Heroku时,应用程序在高度动态的IP地址上运行。一些heroku插件允许通过statig IP路由出站流量但是我需要以编程方式设置代理。我找不到为Oauth请求配置此代理的方法。

有人遇到过这样的问题并找到了解决方法吗?

1 个答案:

答案 0 :(得分:0)

Aaaah最后没有花太多时间找到解决方案(实际上写这个问题是其中的一部分:))

因此omniauth-oauth2策略使用Oauth gem,后者又使用了令人敬畏的Faraday HTTP library。找到setup a proxy in Faraday的方法并不是那么难。

我的Omniauth战术现在看起来像这样:

require 'omniauth-oauth2'

module OmniAuth
  module Strategies
    class MyAuth < OmniAuth::Strategies::OAuth2
      option :name, "MyAuth"

      # Added Basic auth credentials for staging environment
      option :client_options, {:site => "https://youshall:notpass@my-staging-server.info"}

      uid{ raw_info['id'] }

      info do
        {
          remote_id: raw_info['remote_id'],
          name: raw_info['name'],
          email: raw_info['email']
        }
      end

      extra do
        {
          'raw_info' => raw_info
        }
      end

      # Adding the proxy here
      def client
        super.tap do |c|
          c.connection.proxy(ENV["OAUTH_PROXY_URL"]) if ENV["OAUTH_PROXY_URL"]
        end
      end
      def raw_info
        @raw_info ||= access_token.get('/api/me').parsed
      end
    end
  end
end

现在我只需要将我的代理IP列入白名单,以绕过Oauth服务器上的基本身份验证。 Voilà!