Получение неправильных заголовков для промежуточного ПО Traefik ForwardAuth

Я пытался разработать пользовательский аутентификатор для Traefik, используя Django и промежуточное программное обеспечение ForwardAuth. К сожалению, у меня возникли проблемы с предоставленными заголовками для моего приложения:

  • Мое приложение auth имеет три конечные точки:

    • /auth/, которая проверяет, аутентифицирован ли пользователь. Если да, возвращает "OK" с кодом состояния 200. Если нет, пытается получить X-Forwarded-Host, чтобы построить аргумент перенаправления с помощью f"?redirect={request.headers['X-Forwarded-Proto']}://{request.headers['X-Forwarded-Host']}" и затем перенаправить на /auth/login/{redirect_url}
    • .
    • /auth/login, который отображает форму и затем аутентифицируется с Django (он использует ту же логику, что и /auth/ для настройки URL перенаправления
    • )
    • /auth/logout
  • Выставляется по адресу https://auth.my-ip.nip.io, используя следующее:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: django-auth
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`auth.my-ip.nip.io`)
      kind: Rule
      services:
        - name: django-auth
          port: 80
  tls:
    secretName: auth.my-ip.nip.io
  • Промежуточное ПО настроено следующим образом:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: django-auth
spec:
  forwardAuth:
    address: https://auth.my-ip.nip.io:443/auth/
    trustForwardHeader: true
  • Наконец, у меня есть пример приложения, раскрытого и использующего промежуточное ПО django-auth:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: game-2048
spec:
  entryPoints:
    - web
    - websecure
  routes:
    - match: Host(`2048.my-ip.nip.io`)
      kind: Rule
      services:
        - name: game-2048
          port: 80
      middlewares:
        - name: django-auth
  tls:
    secretName: 2048.my-ip.nip.io

Но затем, когда я пытаюсь получить доступ к https://2048.my-ip.nip.io, я получаю следующие заголовки на моем /auth/ Django view:

{
  ...
  'X-Forwarded-Host': 'auth.my-ip.nip.io:443',
  'X-Forwarded-Proto': 'https',
  ...
}

что заставит мое приложение определить https://auth.my-ip.nip.io как URL перенаправления, в то время как он должен быть https://2048.my-ip.nip.io, чтобы я мог вернуться к моему примеру приложения.

Буду рад, если вы мне поможете, возможно я что-то упускаю. Заранее спасибо!

EDIT: Traefik развернут с помощью Helm со значениями по умолчанию, версия 2.5.4.

Вернуться на верх