Получение неправильных заголовков для промежуточного ПО 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.