Резюме
Я пытаюсь настроить аутентификацию, используя настройку Traefik traefik.frontend.auth.forward.address
. Мой основной веб-сервис имеет метку traefik.frontend.auth.forward.address=login.mydomain.com
на контейнере. Кажется, что Traefik правильно перенаправляет входящие запросы, предназначенные для mydomain.com
на login.mydomain.com
, но при отправке формы входа в систему запрос POST превращается в запрос GET, прежде чем он попадает в службу входа в систему, и параметры исходного запроса POST кажутся быть пропущенным. Пользователь не может войти в систему.
Контейнеры
docker run -d \
-l "traefik.frontend.rule=Host:login.mydomain.com; Method:GET, POST" \
-l "traefik.enable=true" \
login-service
docker run -d \
-l "traefik.frontend.rule=Host:mydomain.com" \
-l "traefik.frontend.auth.forward.address=https://login.mydomain.com" \
-l "traefik.frontend.auth.forward.authResponseHeaders=cookie" \
-l "traefik.enable=true" \
web-service
Вопрос
Используя auth.forward.address
, я должен увидеть параметры из исходного запроса POST в моей службе входа в систему? Так как Traefik превращает его в запрос GET, где в этом запросе я должен искать параметры? Или, может быть, я что-то неправильно настроил? Может быть, отсутствует флаг authResponseHeaders
? 1016 *
Что работает
Запросы на mydomain.com
показывать форму входа с login-service
, с продолжением показа URL mydomain.com
; перенаправление на login.mydomain.com
происходит за кулисами, и это правильно.
Я также сам проверил службу входа в систему, и, похоже, она работает. Он размещает форму, которая отправляет POST-запрос службе, а затем отвечает 200 OK и заголовком Set-Cookie
. Фактически, когда я перехожу к login.mydomain.com
напрямую, я могу войти в систему, которая устанавливает мой cookie, и я могу перейти к mydomain.com
и пропустить экран входа в систему.
Что не работает
При отправке формы входа в систему запрос POST достигает login-service
(что подтверждается журналами в этой службе) как запрос GET, и данные в запросе POST исчезают. Traefik добавляет x-forwarded-method
, установленный на POST
, но я не могу найти данные в исходном запросе POST. Мне нужны параметры из формы входа в систему для их проверки, и они, похоже, не доходят до службы входа.
Конфигурация Traefik
Я не думаю, что что-то о моей конфигурации Traefik уместно здесь, но я включил это для полноты.
checkNewVersion = true
logLevel = "DEBUG"
defaultEntryPoints = ["https","http"]
sendAnonymousUsage = true
[api]
dashboard = true
debug = true
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[retry]
[docker]
endpoint = "unix:///var/run/docker.sock"
watch = true
exposedbydefault = false
[acme]
email = "admin@mydomain.com"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
[acme.httpChallenge]
entryPoint = "http"