#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?