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

#python #django #middleware #traefik #traefik-ingress

#python #django #промежуточное программное обеспечение #traefik #traefik-вход

Вопрос:

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

  • Мое приложение аутентификации имеет три конечные точки:
    • /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:

 {
  ...
  '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 , чтобы я мог вернуться к своему примеру приложения.

Я был бы рад, если бы вы могли мне помочь, я, вероятно, что-то упустил. Заранее спасибо!

РЕДАКТИРОВАТЬ: Traefik развертывается с использованием Helm со значениями по умолчанию, версия 2.5.4.