Запись конечной точки не найдена при балансировке нагрузки IdentityServer4

#asp.net-core #nginx #https #load-balancing #identityserver4

#asp.net-ядро #nginx #https #балансировка нагрузки #identityserver4

Вопрос:

Я пытаюсь настроить локальные идентификаторы с балансировкой нагрузки nginx (используя гибридную модель и HTTPS), используя контейнеры docker.

Я могу успешно войти в систему, если я масштабирую идентификаторы до 1.

Когда я масштабируюсь до 2 или более, используя балансировку в циклическом стиле, я перенаправляюсь на страницу входа при попытке входа в систему.

При первоначальной попытке входа в систему попадает в IDS1, затем вторая часть запроса входа попадает в IDS2, которая возвращает следующую ошибку: запись конечной точки не найдена для пути запроса: /Account/Login [IdentityServer4.Hosting .EndpointRouter]

Я проверил, что оба идентификатора запущены и запущены, и если я нажму на документ обнаружения, я увижу, что nginx обходит его, и каждый раз получаю успешный результат.

РЕДАКТИРОВАТЬ: я больше не получаю ошибку, но когда я пытаюсь войти в систему, вторая часть запроса при входе в IDS2 по-прежнему действует так, как будто я не в середине процесса входа в систему и переходит на страницу входа.

Комментарии:

1. Немного не связано, но есть ли у вас одинаковые ключи защиты данных и ключи подписи в обеих службах?

2. @ToreNestenius Итак, обновление проблемы, эта ошибка больше не возникает (я изменил порядок приложений. Используйте IdentityServer() в конфигурации при запуске. Но реальная проблема, стоящая за этим, все еще возникает (IDS2 думает, что вы вообще не вошли в систему, и перенаправляет обратно на логин).

3. @ToreNestenius Что касается вашего вопроса о ключах защиты данных, в настоящее время я использую только IdentityServer. AddSignedCredential(сертификат) для добавления X509Certificate2 я не использую . В настоящее время выполняется функция AddDataProtection().

4. Надеюсь, что мой ответ ниже является приемлемым ответом. 🙂

Ответ №1:

Вам необходимо настроить API защиты данных и установить один и тот же ключ в обеих службах, потому что в противном случае ASP.NET не будет принимать файлы cookie от другого сервиса. Ключ используется для защиты и шифрования файла cookie.

Чтобы узнать о API защиты данных, я недавно написал этот справочный проект

  • AzureKeyVaultKeyRingRepository Цель состоит в том, чтобы продемонстрировать и показать, как хранить ASP.NET Связка ключей API защиты основных данных в Azure Key Vault. (Скоро появится сообщение в блоге)

Подробнее об API защиты данных читайте здесь

Комментарии:

1. Мне пришлось настроить использование локальной файловой системы вместо Azure, но концепция отлично сработала и решила мою проблему! Спасибо.

2. Рад, что вы это исправили!