Azure Веб-приложение + Node.js + Azure AD = Ошибка 431 - PullRequest
2 голосов
/ 06 апреля 2020

Я создал веб-приложение на основе Node.js, работающее в веб-приложении Azure, которое я хотел поставить за аутентификацией Azure Active Directory. После активации «Аутентификация службы приложений» процесс входа в систему работает нормально, однако по возвращении в мое приложение он просто возвращает HTTP 431 «Слишком большие поля заголовка запроса».

Чтобы проверить, что это не мое приложение, я проверил Azure образец веб-приложения для Node.js, и даже при активации AAD возвращается значение 431.

Шаги для воспроизведения:

  • Создание нового Azure resource -> Web App
    • Выберите любой стек времени выполнения на основе Node, например Node 12 LTS
    • Выберите любую ОС
    • Создайте веб-приложение и дождитесь завершения развертывания до sh
  • Создание простого веб-приложения
  • В настройках веб-приложения go для «Аутентификация / Авторизация»
    • Включите «Аутентификация службы приложения» в «Вкл»
    • Выберите Azure Active Directory
    • Выберите Express Режим управления и создайте новый Azure AD приложение в процессе
    • Как «Действие, которое необходимо выполнить, если запрос не аутентифицирован», выберите «Войти с помощью Azure AD»
    • Подтвердить

Результат: при открытии URL-адреса веб-приложения в браузере будет отображаться процесс входа в систему, после чего все будет работать нормально, и AAD возвращается в приложение, однако в этот момент он возвращает HTTP 431.

Дальнейшие тесты:

  • Отключите аутентификацию и все снова работает нормально
  • Вместо этого загрузите простой файл. html Node-приложения работает нормально с включенной аутентификацией
  • Протестировано с restify и http

Есть идеи? Я что-то упустил?

1 Ответ

2 голосов
/ 09 апреля 2020

Это известная проблема, поскольку есть ограничения в более поздних версиях узла, которые используют жесткий заголовок 8 КБ для заголовков. EasyAuth добавляет к запросу несколько очень больших заголовков, что может привести к тому, что контейнер узла отклонит запрос, сделанный контейнером промежуточного программного обеспечения с 400. Подробнее об этом здесь: Это можно уменьшить, установив для приложения значение WEBSITE_AUTH_DISABLE_IDENTITY_FLOW в значение true. Это удалит один из самых больших заголовков, которые мы добавляем к запросу. Этот заголовок обычно используется только приложениями. NET Framework и Azure Functions, поэтому этот параметр должен быть безопасным.

Если проблема все еще возникает, вы можете попробовать использовать версии NodeJS 12 или увеличить параметр размера заголовка: узел сервера. js --max-http-header-size 81000

...