Вопрос или проблема
(Возможно, для этого мне нужен Keycloak Pro. Не уверен.)
-
Я запускаю Keycloak как сервис на своем Fedora.
-
Он слушает на портах 5006/5007 – 5007 для административной консоли.
-
Административная консоль должна быть доступна только с адресов 10.9.8.0/24 и 127.0.0.1.
-
Любая коммуникация «за» моим прокси nginx должна быть http.
+----------------------+
| (Angular)app/browser |
+----------------------+
|
https
|
+------------------+
| mydomain.net |
| NGINX |
| 10.9.8.1 |<------ http -----+
+------------------+ |
|
+---------------+ |
| Keycloak |<-- аутентификация --+
+---------------+ |
^ |
| |
авторизация |
| |
+------------- Запросы ------+---------------+
| | |
v v v
+----------------+ +--------------------+ +--------------------+
| C# SignalR | | C# веб-сервисы | | Angular |
+----------------+ +--------------------+ +--------------------+
Мой nginx настроен следующим образом:
# Прокси для сервера аутентификации (публичный)
location /auth/ {
proxy_pass http://127.0.0.1:5006/auth/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Прокси для административного интерфейса
location /admin/ {
allow 10.9.8.0/24;
allow 127.0.0.1;
deny all;
proxy_pass http://127.0.0.1:5007/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off; # Обеспечить оперативные ответы от Keycloak
}
А Keycloak настроен следующим образом:
feature=hostname:v1
# Конфигурация для сервера аутентификации (публичный)
http-enabled=true
http-host=127.0.0.1
http-port=5006
# Конфигурация для административного интерфейса
http-management-port=5007
# Настройки имени хоста
hostname=example.com
hostname-url=https://example.com/auth
hostname-admin-url=https://example.com/admin
Когда я перехожу по адресу https://example.com/admin/ (с узла в моей сети 10.9.8.0/24), я вижу только белую страницу с текстом ‘Интерфейс управления Keycloak’. tail -f /var/log/nginx/error.log
не показывает ошибок, а сетевой трассировки в Chrome показывает один ответ 200.
https://example.com/auth/, с другой стороны, показывает страницу с логотипом Keycloak и сообщением Сожалеем... Страница не найдена
и ошибку 404 в сетевой трассировке.
Я что-то упускаю, просто не знаю, что это.
Ответ или решение
Для решения вашей проблемы с настройкой приложения Angular и C# с использованием Keycloak и NGINX, давайте рассмотрим несколько возможных причин возникновения описанных вами проблем, а также предложим пути их решения.
1. Настройка NGINX
Ваши правила в конфигурации NGINX выглядят в целом корректными, но давайте убедимся, что пути соответствуют тому, как настроен Keycloak. Ваша конфигурация для Keycloak должна точно соответствовать ожидаемым путям.
Правила для аутентификации (Public)
# Proxy для сервера аутентификации (публичный)
location /auth/ {
proxy_pass http://127.0.0.1:5006/auth/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Здесь у вас всё верно. Убедитесь, что Keycloak действительно отвечает по этому адресу.
Правила для админ интерфейса
# Proxy для административного интерфейса
location /admin/ {
allow 10.9.8.0/24;
allow 127.0.0.1;
deny all;
proxy_pass http://127.0.0.1:5007/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off; # Убедитесь, что ответы от Keycloak возвращаются быстро
}
Обратите внимание на установку правил доступа. Они выглядят корректно и должны работать, если доступ к серверу производится из указанных диапазонов.
2. Настройка Keycloak
Ваши настройки Keycloak также выглядят верно, важно удостовериться, что они действительно активны.
http-enabled=true
http-host=127.0.0.1
http-port=5006
http-management-port=5007
hostname=example.com
hostname-url=https://example.com/auth
hostname-admin-url=https://example.com/admin
Убедитесь, что http-management-port
действительно настроен на 5007, и ваш интерфейс управления Keycloak доступен на этом порту.
3. Проверка логов
Поскольку вы не видите ошибок в логах NGINX, попробуйте проверить логи самого Keycloak. Это поможет понять, обрабатываются ли запросы должным образом. Логи Keycloak обычно находятся в /opt/jboss/keycloak/standalone/log/server.log
.
4. Page not found
Ошибка 404
на странице https://example.com/auth/
может указывать на то, что NGINX не может найти соответствующий маршрут в Keycloak или что Keycloak не настроен для обработки этого конкретного URL.
Убедитесь, что вы используете правильный базовый URL для Keycloak и что он соответствует URL, который вы указали в вашем фронтенд-приложении Angular.
Также проверьте, сохранены ли необходимые сущности (например, Realm, Client) в Keycloak, что может быть причиной возникновения проблем при обращении к ресурсу.
5. Проверка конфигурации клиента
Если ваш Angular-приложение использует Keycloak JavaScript адаптер, убедитесь, что настройки клиента совпадают с тем, что определено в ключах конфигурации Keycloak:
- Проверьте, что указаны правильные значения
auth-server-url
,realm
иclientId
.
6. Итог
- Проверьте доступность Keycloak на
http://127.0.0.1:5006/auth/
иhttp://127.0.0.1:5007/
. - Убедитесь, что все необходимые настройки в Keycloak и NGINX корректны.
- Изучите логи как NGINX, так и Keycloak для дополнительной информации о состоянии и ошибках.
- Проверьте настройки клиента Angular, чтобы убедиться, что они соответствуют конфигурации Keycloak.
Если после всех этих шагов проблема не решена, возможно, стоит рассмотреть возможность использования Keycloak Pro для большей поддержки и функционала, но это должно быть последним шагом, учитывая, что ключевые функции уже доступны в Open Source версии.