Рейтинг:0

Отладка сторонних аутентификаций на локальном хосте с помощью Docker и nginx

флаг kr

У нас есть веб-сайт, на который мы только что добавили сторонние аутентификации, такие как Google, Twitter. Я пытаюсь проверить эти аутентификации на локальном хосте (MacOS).

Я запускаю докер для запуска nginx, вот docker-compose-dev.xml

версия: "3"
Сервисы:
  https:
    изображение: битнами/nginx: последний
    перезапуск: если не остановлен
    порты:
      - 443:443/TCP
    тома:
      - ./conf.d/dev.conf:/opt/bitnami/nginx/conf/server_blocks/default.conf:ro
    дополнительные_хосты:
      - "host.docker.internal: хост-шлюз"

А вот conf.d/dev.conf:

веселье вверх по течению {
   сервер 178.62.87.72:443;
}
сервер {
    слушать 443 ssl;
    имя_сервера локальный хост;
    ssl_certificate /certs/server.crt;
    ssl_certificate_key /certs/server.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers включен;
    ssl_session_timeout 1 д;
    ssl_stapling выключен;
    ssl_stapling_verify выключен;
    add_header Strict-Transport-Security max-age=15768000;
    add_header X-Frame-Options "";
    proxy_ssl_name "www.funfun.io";
    proxy_ssl_server_name включено;
    местоположение ~ /socialLoginSuccess {
        переписать ^ '/#/socialLoginSuccess' перенаправить;
     }
    расположение ~ /auth/(.*) {
        proxy_pass https://funfun/10studio/auth/$1?$query_string;
        proxy_set_header Хост localhost;
     }
    место расположения / {
        proxy_set_header Хост $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $ схема;
        proxy_set_header Accept-Encoding "";
        proxy_set_header Прокси "";
        прокси_пасс http://host.docker.internal:3000/;
        # Эти три строки добавлены в соответствии с https://github.com/socketio/socket.io/issues/1942 для устранения ошибки socketio.
        прокси_http_версия 1.1;
        proxy_set_header Обновить $http_upgrade;
        proxy_set_header Соединение "обновление";
    }
}

Как мы запускаем приложение sudo PORT=8000 HTTPS=true ./node_modules/.bin/react-scripts start. затем https://локальный:8000/#/знак в браузере открывается страница, где находятся кнопки аутентификации.

URL-адрес кнопки, связанной с аутентификацией Google, https://localhost/10studio/auth/google. Нажав на нее, я вижу сначала https://localhost/10studio/auth/google в адресной строке браузера, но страница для ввода Google ID и пароля не появляется, затем через несколько секунд URL-адрес становится https://localhost/#/socialLoginSuccess, и на странице отображается 502 Неверный шлюз. Я вижу следующие журналы в терминале с запущенным nginx:

$ docker-compose --f docker-compose-dev.yml вверх
ВНИМАНИЕ: для этого проекта обнаружены потерянные контейнеры (frontend_10studio_1, frontend_frontend_1). Если вы удалили или переименовали эту службу в своем файле компоновки, вы можете запустить эту команду с флагом --remove-orphans, чтобы очистить ее.
Запуск frontend_https_1... готово
Подключение к интерфейсу_https_1
https_1 | нгинкс 21:24:05.37 
https_1 | nginx 21:24:05.38 Добро пожаловать в контейнер Bitnami nginx
https_1 | nginx 21:24:05.38 Подпишитесь на обновления проекта, просматривая https://github.com/bitnami/bitnami-docker-nginx
https_1 | nginx 21:24:05.39 Отправляйте вопросы и запросы функций на https://github.com/bitnami/bitnami-docker-nginx/issues
https_1 | нгинкс 21:24:05.39 
https_1 | nginx 21:24:05.39 INFO ==> ** Запуск установки NGINX **
https_1 | nginx 21:24:05.42 INFO ==> Проверка настроек в NGINX_* env vars
https_1 | nginx 21:24:05.43 ИНФОРМАЦИЯ ==> Инициализация NGINX
https_1 | реальный путь: /bitnami/nginx/conf/vhosts: нет такого файла или каталога
https_1 | 
https_1 | nginx 21:24:05.45 INFO ==> ** Настройка NGINX завершена! **
https_1 | nginx 21:24:05.47 ИНФОРМАЦИЯ ==> ** Запуск NGINX **
https_1 | 172.19.0.1 - - [08/ноября/2021:21:25:06 +0000] "GET /10studio/auth/google HTTP/1.1" 302 0 "https://localhost:8000/" "Mozilla/5.0 (Macintosh ; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/95.0.4638.54 Safari/537.36" "-"
https_1 | 172.19.0.1 - - [08/ноября/2021:21:25:07 +0000] "GET /auth/google/callback?code=4%2F0AX4XfWiqleRl2StBpNOgOtzjqZlftvq9-uDmiPVLZqcgo2xjjhohu47iAV5qxoJFwwwThaQYzg&scope=email%A%A%apF%3+https .com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+openid&authuser=0&prompt=none HTTP/1.1" 302 82 "https://localhost:8000/" "Mozilla /5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/95.0.4638.54 Safari/537.36" "-"
https_1 | 172.19.0.1 - - [08/ноября/2021:21:25:07 +0000] "GET /auth/signinSuccess HTTP/1.1" 302 82 "https://localhost:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/95.0.4638.54 Safari/537.36" "-"
https_1 | 172.19.0.1 - - [08/ноября/2021:21:25:07 +0000] "GET /socialLoginSuccess HTTP/1.1" 302 138 "https://localhost:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/95.0.4638.54 Safari/537.36" "-"
https_1 | 2021/11/08 21:25:39 [ошибка] 27#27: *2 connect() не удалось (110: время ожидания соединения истекло) при подключении к восходящему каналу, клиент: 172.19.0.1, сервер: localhost, запрос: «GET / HTTP/1.1", восходящий поток: "http://192.168.65.1:3000/", хост: "localhost", реферер: "https://localhost:8000/"
https_1 | 172.19.0.1 - - [08/ноября/2021:21:25:39 +0000] "GET / HTTP/1.1" 502 552 "https://localhost:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/95.0.4638.54 Safari/537.36" "-"

Кто-нибудь знает, что здесь не так?

Кроме того, когда я отлаживаю nginx, он для меня как черный ящик. Я действительно хочу иметь возможность отслеживать и видеть, какой URL-адрес входит в какой блок местоположения и изменяется на какой URL-адрес (по proxy_pass или же переписать, и т.д.). У кого-нибудь есть лучший способ отладить или зарегистрировать это?

флаг ws
Я не знаком с обработкой certbot в докере, но letsencrypt не будет выдавать сертификат с именем хоста «localhost».
флаг kr
@symcbean, вы правы, теперь я использую другой образ докера.
dirkt avatar
флаг in
Общие подходы к отладке (которые вы можете использовать уже сейчас): (1) Используйте вкладку сети в инструментах разработчика для вашего браузера (Safari или другого), он покажет вам, в частности, новое место назначения для 302-х, чтобы вы могли больше понять, что идет по течению. (2) Используйте прокси-сервер «человек посередине», например. [mitmproxy](https://mitmproxy.org), при необходимости в режиме прозрачного прокси. (3) В принципе, вы также можете установить mitproxy между nginx и вашим сервисом.
dirkt avatar
флаг in
И я не понимаю, как вы хотите перехватывать обычные перенаправления OAuth с помощью настройки прокси-сервера, поэтому я не могу комментировать, почему это не работает. Для обычного OAuth ничего особенного делать не нужно.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.