Ошибка авторизации через ActiveDirectory с Apache + Kerberos при HTTP запросе от клиента
сложно составить вопрос, поэтому предложения правок и подсказки приветствуются.
О проблеме:
- Имеется веб приложение: frontend js, backend php, веб-сервер Apache.
- Frontend и Backend имеют разные директории на сервере.
- Весь Frontend настроен на url
/, и корневая директория/var/www/frontend/dist/public. - 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/.
- В 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>
Всё работает, если я открою тестовый файл PHP
example.com/api/ad/test.php, в котором отображается значение$_SERVER['REMOTE_USER']. Никаких окон не всплывает. Всё работает как должно работать.Но, когда открывается страница frontend, там делается клиентский HTTP запрос к
example.com/api/ad/. Заканчивается тем, что всплывает окно "авторизации Windows" в домене. То есть данные не передаются автоматически, как это было в пункте 6. Авторизация не выполняется и запрашиваются данные. При их вводе, окно не исчезает, данные запрашиваются бесконечно. Если закрыть всплывающее окно, то результат HTTP запроса кexample.com/api/ad/будет401 нет авторизации.
Как я понял, проблема в том, что если в браузере первое действие - это скрипт сервера, всё работает. Если это действие вторичное, то есть мы перешли на страницу index.html интерфейса, а там приложение делает запрос, то не работает.
Как решить эту проблему? Что я не правильно делаю или не так понял?
Моя задача, это в интерфейсе отображать кнопку входа через "Active Directory", если присутствует значение $_SERVER['REMOTE_USER']. Интерфейс на странице входа делает этот запрос.