我们正在主应用程序上设置一个门卫提供程序,以便在某些应用程序上启用Oauth2身份验证。我们的生产环境一切正常。
在另一个故事的登台环境中,因为我们的登台应用程序支持基本身份验证:
{{1}}
这意味着Oauth端点必须通过此基本身份验证。这是Oauth客户端配置:
{{1}}
但Oauth似乎无法解析URI,包括,因为我在尝试获取凭据时收到以下错误:
{{1}}
如果Oauth服务器支持此类身份验证,我无法为Omniauth或Omniauth :: Oauth2提供基本身份验证凭据。
另一种方法是将登台Oauth服务器上的登台客户端的IP地址列入白名单。当我们使用Heroku时,应用程序在高度动态的IP地址上运行。一些heroku插件允许通过statig IP路由出站流量但是我需要以编程方式设置代理。我找不到为Oauth请求配置此代理的方法。
有人遇到过这样的问题并找到了解决方法吗?
答案 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à!