#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.