Msal.js перенаправляет на локальный хост внутри kubernetes

У меня есть приложение NextJs, использующее Msal 2 для аутентификации в AzureAD.

Работая локально или внутри dokcer-контейнера локально, он работает просто отлично, потому что порт контейнера 3000 перенаправляется непосредственно на хост 3000. Вход в систему и перенаправление на http://localhost:3000 не является проблемой в этом сценарии.

Теперь я развернул это в кластере Kubernetes в среде разработки / промежуточной разработки с самозаверяющим сертификатом и настраиваемым доменом, возникает одна проблема: он все еще хочет перенаправить обратно на http://localhost:3000, хотя входной контроллер nginx указывает на https://machine.domain.eu

Текущая серия событий:

  1. Открыть URL
  2. Автоматически открывать всплывающее окно авторизации
  3. всплывающее окно перенаправляет на login.microsoftonline.com/...
  4. поток пытается перенаправить обратно на http://localhost:3000/#code=xxxxxxx

Что должно произойти:

  1. Перенаправить обратно на https://machine.domain.eu

Текущая конфигурация msal выглядит следующим образом:

export const msalConfig = {
    auth: {
        clientId: "611c5aa6-f7de-4a06-ace7-xxxxxxxxxx",
        authority: "https://login.microsoftonline.com/291d05b0-1020-4f36-aac5-xxxxxxxxxxx",
        redirectUri: process.env.HOSTNAME || "http://localhost:3000",            navigateToLoginRequestUrl: true
    },
    cache: {
        cacheLocation: "localStorage", // This configures where your cache will be stored
        storeAuthStateInCookie: false // Set this to "true" if you are having issues on IE11 or Edge
    },
}

в то время как process.env.HOSTNAME динамически передается через конвейер сборки как переменная в манифесте:

spec:
  hostname: web-dev
  containers:
    - name: web 
      image: localhost:32000/web
      env:
      - name: NODE_TLS_REJECT_UNAUTHORIZED
        value: "0"
      - name: BASE_PATH
        value: '/dev'
      - name: HOSTNAME
        value: 'https://machine.domain.eu'
      ports:
      - containerPort: 3000

Есть ли крючок или другая точка входа для перехвата этого поведения? Если я удалю Uri перенаправления локального хоста из AzureAD, я даже не дойду до этого, поэтому мои подозрения прямо сейчас указывают на то, что next.js является виновником загрузки на локальном хосте: 3000 внутри контейнера.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
527
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет единой причины, по которой это не удалось в моей среде kubernetes.

Прежде всего, я установил navigateToLoginRequestUrl: true, что означало, что если приложение запустится внутри localhost:3000, оно будет перенаправлено именно на этот URL-адрес, когда придет ответ.

Это также означало, что установка любого значения redirectUri не имела никакого эффекта.

Второй причиной, по которой это не удалось, был фактически мой манифест развертывания k8s, в котором указывалось, какой образ нужно извлечь, но не какая версия. После того, как я явно установил значение :latest, мои изменения в коде сразу же вступили в силу.

Причина, которая привела меня на этот след, заключалась в исследовании стручков:

microk8s kubetl get pods
microk8s kubectl describe pod web-xxxx-xxxxxxx

Вот увидел картинку с дайджестом SHA в лайках registry/web@sha256-xxxxxx

Я сравнил это значение с самым последним изображением web с docker images --digest. Здесь я увидел, что у изображения с тегом latest другой дайджест sha256-yyyyyy

Еда на вынос:

  1. Если URL-адрес ответа отличается от requestUrl, установите navigateToLoginRequestUrl на false
  2. Убедитесь, что изображение, на котором, по вашему мнению, построен контейнер, на самом деле является тем изображением, о котором вы думаете.

Другие вопросы по теме