Как я могу использовать имя внешней сети при доступе к серверу OAUTH? - PullRequest
0 голосов
/ 13 марта 2019

В Spring Boot реализован сервер OAuth2.

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    //blah blah

    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
        oauthServer.realm( REALM+"/client" );
        oauthServer.passwordEncoder( passwordEncoder );
        oauthServer.checkTokenAccess( "permitAll()" );
    }

}

Он отлично работает с моими клиентами (Spring Boot) в моей среде разработки.

Теперь мне нужно поместить их все в среду Docker. Все работало очень хорошо, когда я использую имена компьютеров (имена хостов докера A.K.A.) в качестве ссылки во всех конфигурационных файлах. Все, что мне нужно, это добавить все имена хостов Docker в мой собственный файл хостов, и я смог найти всех, используя мой браузер, а внутри docker связь была также выполнена с использованием имен хостов docker.

Мои проблемы начались, когда я изменил ссылку на сервер OAuth2 на полное доменное имя (например, с «server» на «server.oauth.com»).

Я просто изменяю запись "server" в файле hosts (на моем компьютере) на "server.oauth.com", и мой браузер все еще может найти сервер OAuth.

Что ж, клиентское приложение больше не может использовать конечную точку "/ me", потому что клиентская докерная машина не знает ни о каком "server.oauth.com" и вызывает бесконечное перенаправление на конечную точку входа в систему, поэтому мой браузер жалуется на "TOO_MANY_REDIRECTS "и остановка без авторизации (после отправки формы авторизации).

Это файл application.yml моего клиентского приложения:

Эта конфигурация работает, потому что все машины могут разрешить server. Docker-машины разрешаются с помощью внутреннего DNS, а мой компьютер - с помощью моего hosts file, указывающего на IP-адрес хоста Docker:

security:
  basic:
    enabled: false
  oauth2:
      client:
        clientId: cliente01
        clientSecret: secret
        accessTokenUri: http://server:port/oauth/token
        userAuthorizationUri: http://server:port/oauth/authorize
      resource:
        userInfoUri: http://server:port/user/me

Эта конфигурация НЕ РАБОТАЕТ, потому что я могу решить server.oauth.com, используя мой файл hosts так же, как и раньше, но машины Docker не могут ее разрешить. Таким образом, конечная точка /me в userInfoUri не может быть найдена (клиентский компьютер использует эту конечную точку для запроса данных о сервере на сервере):

security:
  basic:
    enabled: false
  oauth2:
      client:
        clientId: cliente01
        clientSecret: secret
        accessTokenUri: http://server.oauth.com:port/oauth/token
        userAuthorizationUri: http://server.oauth.com:port/oauth/authorize
      resource:
        userInfoUri: http://server.oauth.com:port/user/me

Я уже пытался поместить сопоставление в параметре docker run --add-host=server.oauth.com:<DOCKER_HOST_IP> (и да, это заставляет вещь работать), но я боюсь, что в будущем IP-адрес изменится (что, если изменится хост-машина докера его 'IP-адрес?).

Каков наилучший способ решить эту проблему?

...