Мы настраиваем провайдера Doorkeeper в нашем главном приложении, чтобы включить аутентификацию Oauth2 в некоторых сторонних приложениях.Все отлично работает в нашей производственной среде.
В промежуточной среде это другая история, потому что наши промежуточные приложения стоят за базовой аутентификацией:
config.middleware.insert_after(::Rack::Runtime,
'Rack::Auth::Basic',
"Staging") do |user, password|
[user, password] == [ENV['STAGING_USERNAME'], ENV['STAGING_PASSWORD']]
end
end
Это означает, что конечная точка Oauth должна проходить через эту базовуюаутентификация.Вот конфигурация клиента Oauth:
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
def raw_info
@raw_info ||= access_token.get('/api/me').parsed
end
end
end
end
Но Oauth, похоже, не может проанализировать URI, включая, поскольку я получаю следующую ошибку при попытке получить учетные данные:
Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8
- 51 non-project frames
1
File "/app/vendor/bundle/ruby/2.4.0/gems/oauth2-1.2.0/lib/oauth2/error.rb" line 30 in encode
2
File "/app/vendor/bundle/ruby/2.4.0/gems/oauth2-1.2.0/lib/oauth2/error.rb" line 30 in error_message
3
File "/app/vendor/bundle/ruby/2.4.0/gems/oauth2-1.2.0/lib/oauth2/error.rb" line 17 in initialize
4
File "/app/vendor/bundle/ruby/2.4.0/gems/oauth2-1.2.0/lib/oauth2/client.rb" line 112 in new
5
File "/app/vendor/bundle/ruby/2.4.0/gems/oauth2-1.2.0/lib/oauth2/client.rb" line 112 in request
6
File "/app/vendor/bundle/ruby/2.4.0/gems/oauth2-1.2.0/lib/oauth2/client.rb" line 138 in get_token
7
File "/app/vendor/bundle/ruby/2.4.0/gems/oauth2-1.2.0/lib/oauth2/strategy/auth_code.rb" line 29 in get_token
8
File "/app/vendor/bundle/ruby/2.4.0/gems/omniauth-oauth2-1.4.0/lib/omniauth/strategies/oauth2.rb" line 89 in build_access_token
9
File "/app/vendor/bundle/ruby/2.4.0/gems/omniauth-oauth2-1.4.0/lib/omniauth/strategies/oauth2.rb" line 73 in callback_phase
10
File "/app/vendor/bundle/ruby/2.4.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb" line 227 in callback_call
11
File "/app/vendor/bundle/ruby/2.4.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb" line 184 in call!
12
File "/app/vendor/bundle/ruby/2.4.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb" line 164 in call
13
File "/app/vendor/bundle/ruby/2.4.0/gems/omniauth-1.3.1/lib/omniauth/builder.rb" line 63 in call
Я не смог найти учетные данные Basic Auth для Omniauth или Omniauth :: Oauth2, если за такой аутентификацией стоит сервер Oauth.
Другим способом может быть внесение в белый список IP-адреса промежуточных клиентов на промежуточном сервере Oauth.Поскольку мы используем Heroku, приложения работают на высокодинамичных IP-адресах.Некоторые дополнения герою позволяют маршрутизировать исходящий трафик через статиг IP, НО мне нужно программно настроить прокси.И я не смог найти способ настроить этот прокси для запросов Oauth.
Кто-нибудь сталкивался с такой проблемой и нашел обходной путь?