Facebook использует http вместо https для перенаправления после входа в систему

#reactjs #spring #facebook #nginx #oauth

#reactjs #весна #Facebook #nginx #oauth

Вопрос:

У меня есть приложение Spring и акт реагирования, написанный так, чтобы пользователь мог использовать facebook для входа в систему. Я также купил домен с сертификатом SSL и установил сертификат в свой обратный прокси-сервер nginx.

Вот моя конфигурация nginx (она выполняется в контейнере docker):

 events {
    worker_connections 1024;
}



http {

    server { 
        listen          80;
        server_name     frontend;
        
        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP         $remote_addr;
            proxy_set_header X-Frame-Options   SAMEORIGIN;
            
            proxy_pass http://host.docker.internal:3000/;
        }
    
    }
    
    server { 
        listen                  443 ssl;
        server_name             frontend_secure;
        ssl_certificate         /etc/ssl/private/8e3a263352b3f661.pem;
        ssl_certificate_key     /etc/ssl/private/key.key;
        
        location / {
            proxy_set_header    Host                $http_host;
            proxy_set_header    X-Forwarded-Proto   $scheme;
            proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
            proxy_set_header    X-Real-IP           $remote_addr;
            proxy_set_header    X-Frame-Options     SAMEORIGIN;
            
            proxy_pass          http://host.docker.internal:3000;
        }
        
        location /api {
            proxy_set_header    Host                $http_host;
            proxy_set_header    X-Forwarded-Proto   $scheme;
            proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
            proxy_set_header    X-Real-IP           $remote_addr;
            proxy_set_header    X-Frame-Options     SAMEORIGIN;
            
            proxy_pass          http://host.docker.internal:8081;
        }
    
    }
}
 

Я добавил свой домен https к доменам приложений, URL-адресу сайта, доменам и допустимым URI перенаправления OAuth в консоли Facebook. В конфигурации серверной spring у меня есть настройка домена https в качестве URL-адреса для успешного входа:

  http.authorizeRequests()
                .antMatchers("/api/users/login**", "/callback/", "/webjars/**", "/error**", "/api/users/availableAuths").permitAll()
                .antMatchers("/oauth_login", "/loginFailure", "/").permitAll()
                .anyRequest().authenticated()
                .and()
                .oauth2Login()
                .defaultSuccessUrl("https://domain.dev/", true)
                .failureUrl("/loginFailure")
                .loginPage("/api/users/availableAuths")
                .and()
                .logout()
        .logoutUrl("/");
 

Я могу правильно видеть интерфейс (с защищенным https), и он правильно перенаправляет на facebook для входа в систему. Проблема в том, что при входе в систему я получаю это сообщение:

 Facebook has detected Eat App isn't using a secure connection to transfer information.
Until Eat App updates its security settings, you won't be able to use Facebook to log into it.
 

Я вижу, что в ссылке, где останавливается facebook, есть

 https://www.facebook.com/v2.8/dialog/oauth? (...) redirect_uri=http://domain.dev/api/login/oauth2/code/facebook
 

Таким redirect_uri образом, URL-адрес facebook — это HTTP, а не HTTPS. Почему это так? Откуда взялся этот redirect_uri параметр с http?