Ошибка авторизации через ActiveDirectory с Apache + Kerberos при HTTP запросе от клиента

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

О проблеме:

  1. Имеется веб приложение: frontend js, backend php, веб-сервер Apache.
  2. Frontend и Backend имеют разные директории на сервере.
  3. Весь Frontend настроен на url /, и корневая директория /var/www/frontend/dist/public.
  4. Backend настроен на 3 пути:

4.1. Простая авторизация - url /api/auth/, и корневая директория /var/www/backend/public/auth/.

4.2. Active Directory авторизация - url /api/ad/, и корневая директория /var/www/backend/public/ad/.

4.3. Операции и действия - url /api/graphql/, и корневая директория /var/www/backend/public/graphql/.

  1. В Apache настроен Kerberos на путь /var/www/backend/public/ad/, который должен взаимодействовать с браузером. В итоге на PHP должно быть значение $_SERVER['REMOTE_USER'].
<Directory /var/www/backend/public/ad>
  <RequireAny>
    <RequireAll>
      Require all granted
      Require not ip 192.168.1.0/24
    </RequireAll>
    AuthType GSSAPI
    AuthName "Project"
    GssapiCredStore keytab:/etc/httpd/projecthttp.keytab
    GssapiSSLonly On
    GssapiBasicAuth Off
    Require valid-user
  </RequireAny>
</Directory>
  1. Всё работает, если я открою тестовый файл PHP example.com/api/ad/test.php, в котором отображается значение $_SERVER['REMOTE_USER']. Никаких окон не всплывает. Всё работает как должно работать.

  2. Но, когда открывается страница frontend, там делается клиентский HTTP запрос к example.com/api/ad/. Заканчивается тем, что всплывает окно "авторизации Windows" в домене. То есть данные не передаются автоматически, как это было в пункте 6. Авторизация не выполняется и запрашиваются данные. При их вводе, окно не исчезает, данные запрашиваются бесконечно. Если закрыть всплывающее окно, то результат HTTP запроса к example.com/api/ad/ будет 401 нет авторизации.

Как я понял, проблема в том, что если в браузере первое действие - это скрипт сервера, всё работает. Если это действие вторичное, то есть мы перешли на страницу index.html интерфейса, а там приложение делает запрос, то не работает.

Как решить эту проблему? Что я не правильно делаю или не так понял?

Моя задача, это в интерфейсе отображать кнопку входа через "Active Directory", если присутствует значение $_SERVER['REMOTE_USER']. Интерфейс на странице входа делает этот запрос.


Ответы (0 шт):