Spring Boot: конечная точка OAuth перенаправляет на 8443 - PullRequest
0 голосов
/ 17 марта 2020

У меня есть веб-приложение, работающее только с SSL (без http) на порту 8080:

server:
  ssl:
    key-store-type: PKCS12
    key-store: file:${SERVER_KEYSTORE_PATH}
    key-store-password: ${SERVER_CERT_PASSWORD}
  port: 8080

Когда я запускаю приложение, я вижу в журналах:

2020-03-17 17:32:29.836  INFO 90960 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (https)

Одна из моих конечных точек (на самом деле root) защищена Spring Security, OAuth2:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        String baseURI = redirectURI.substring(redirectURI.lastIndexOf("/"));
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/").authenticated()
                .antMatchers("/**").permitAll()
                .and()
                .oauth2Login()
                .defaultSuccessUrl("/")
                .redirectionEndpoint().baseUri(baseURI);
    }

Проблема в том, что когда я go до https://localhost: 8080 - он перенаправляет меня на https://localhost: 8443 / oauth2 / авторизация / oauth Итак, по какой-то причине порт 8080 переопределяется с 8443.

Насколько я понял из Подобные вопросы, это происходит потому, что Tomcat пытается перенаправить пользователя на конечную точку с поддержкой SSL (https) с простой конечной точки (http). Но моя конечная точка уже поддерживает SSL, поэтому я не совсем понимаю, почему это происходит. Если я go на любой другой конечной точке, он работает с https и портом 8080 - так что только защищенная конечная точка проблематична c.

Я пытался настроить TomcatServletWebServerFactory с помощью ConnectorCustomizers и установить там порт перенаправления на 8080, но это не помогло.

Есть идеи, как отключить это бесполезное перенаправление?

1 Ответ

0 голосов
/ 19 марта 2020

Согласно https://github.com/spring-projects/spring-security/issues/8140#issuecomment -600980028 :

@Override
protected void configure(HttpSecurity http) throws Exception {
    PortMapperImpl portMapper = new PortMapperImpl();
    portMapper.setPortMappings(Collections.singletonMap("8080","8080"));
    PortResolverImpl portResolver = new PortResolverImpl();
    portResolver.setPortMapper(portMapper);
    LoginUrlAuthenticationEntryPoint entryPoint = new LoginUrlAuthenticationEntryPoint(
            "/login");
    entryPoint.setPortMapper(portMapper);
    entryPoint.setPortResolver(portResolver);
    http
        .exceptionHandling()
            .authenticationEntryPoint(entryPoint)
            .and()
        //...
        ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...