Nginx
Включите одиночный вход на основе OpenID Connect для приложений, проксируемых через NGINX Plus, используя Casdoor в качестве провайдера идентификации (IdP).
Это руководство объясняет, как включить одиночный вход (SSO) для приложений, которые проксируются через NGINX Plus. Решение использует OpenID Connect в качестве механизма аутентификации, с Casdoor в качестве провайдера идентификации (IdP) и NGINX Plus в качестве доверяющей стороны.
Смотрите также: Вы можете найти больше информации об интеграции NGINX Plus с OpenID Connect в репозитории проекта на GitHub.
Предварительные требования
Инструкции предполагают, что у вас есть следующее:
Запущенный сервер Casdoor. Обратитесь к документации Casdoor для Установки сервера и Попробуйте с Docker.
Подписка на NGINX Plus и NGINX Plus R15 или более поздняя версия. Инструкции по установке смотрите в Руководстве администратора NGINX Plus.
Модуль JavaScript NGINX, который необходим для обработки взаимодействия между NGINX Plus и IdP, смотрите здесь. После установки NGINX Plus установите модуль, используя соответствующую команду для вашей операционной системы.
Для Debian и Ubuntu:
sudo apt install nginx-plus-module-njs
Для CentOS, RHEL и Oracle Linux:
sudo yum install nginx-plus-module-njs
Следующая директива должна быть включена в контекст конфигурации верхнего уровня ("main") в /etc/nginx/nginx.conf, чтобы загрузить модуль JavaScript NGINX:
load_module modules/ngx_http_js_module.so;
Настройка Casdoor
Примечание: Следующая процедура отражает интерфейс Casdoor на момент публикации, но интерфейс может измениться. Используйте это руководство в качестве справки и при необходимости адаптируйте его к текущему интерфейсу Casdoor.
Чтобы создать клиента Casdoor для NGINX Plus в интерфейсе Casdoor, выполните следующие шаги:
Войдите в свою учетную запись Casdoor по адресу http://your-casdoor-url.com/login/.
В верхней навигационной колонке нажмите Application. На открывшейся странице Application нажмите кнопку Add в верхнем левом углу.
На открывшейся странице Edit Application измените значение в полях Name и Display name на имя приложения, для которого вы включаете SSO. Здесь мы используем NGINX Plus.
В поле Redirect URLs введите URL-адрес экземпляра NGINX Plus, включая номер порта и заканчивая на /_codexch (в этом руководстве это https://your-site-url.com:443/_codexch).
Примечания:
- Для производства настоятельно рекомендуем использовать SSL/TLS (порт 443).
- Номер порта обязателен, даже если вы используете стандартный порт для HTTP (80) или HTTPS (443).
Запишите значения в полях Client ID и Client Secret. Вы скопируете их в файл конфигурации NGINX Plus в Шаге 4 Настройки NGINX Plus.
Нажмите Roles в верхней навигационной колонке, затем нажмите кнопку Add в верхнем левом углу открывшейся страницы.
На открывшейся странице Add введите значение в полях Name и Display Name (здесь это nginx-casdoor-role) и нажмите кнопку Save.
В верхней навигационной колонке нажмите Users. На открывшейся странице Users либо нажмите Edit, чтобы отредактировать одного из существующих пользователей, либо нажмите кнопку Add в верхнем левом углу, чтобы создать нового пользователя.
На открывшейся странице Add измените Name и Display Name по своему усмотрению (здесь это user1).
Выберите NGINX Plus в поле Signup application.
В поле Managed accounts выберите NGINX Plus в Application и заполните имя пользователя и пароль.
Вернитесь на страницу Roles и нажмите Edit в строке nginx-casdoor-role. На открывшейся странице в поле Sub users выберите только что созданное имя пользователя (здесь это built-in/user1).
Настройка NGINX Plus
Чтобы настроить NGINX Plus в качестве доверяющей стороны OpenID Connect, выполните следующие шаги:
Начните с создания клонирования репозитория GitHub nginx-openid-connect:
git clone https://github.com/nginxinc/nginx-openid-connect
Скопируйте следующие файлы из клонирования в директорию /etc/nginx/conf.d:
- frontend.conf
- openid_connect.js
- openid_connect.server_conf
- openid_connect_configuration.conf
Получите URL-адреса для точки авторизации, точки токена и файла JSON Web Key (JWK) из конфигурации Casdoor. Откройте терминал и выполните следующую команду
curl
, передав вывод указанной командеpython
, чтобы сгенерировать читаемый формат конфигурации. Для краткости мы сократили вывод, чтобы отобразить только соответствующие поля.curl http://<casdoor-server-address>/.well-known/openid-configuration | python -m json.tool
Откройте /etc/nginx/conf.d/openid_connect_configuration.conf с помощью вашего предпочтительного текстового редактора. Измените значение параметра "default" для каждой из следующих директив map на указанные значения:
map $host $oidc_authz_endpoint
– Используйте значениеauthorization_endpoint
из Шага 3 (в этом руководстве,https://<casdoor-server-address>/login/oauth/authorize
)map $host $oidc_token_endpoint
– Используйте значениеtoken_endpoint
из Шага 3 (в этом руководстве,http://<casdoor-server-address>/api/login/oauth/access_token
)map $host $oidc_client
– Используйте значение в поле Client ID из Шага 4 Настройки Casdoormap $host $oidc_client_secret
– Используйте значение в поле Client Secret из Шага 2 Настройки Casdoormap $host $oidc_hmac_key
– Используйте уникальную, длинную и безопасную фразу
Настройте файл JWK в зависимости от используемой версии NGINX Plus:
- В NGINX Plus R17 и более поздних версиях NGINX Plus может напрямую читать файл JWK из URL, указанного как
jwks_uri
в Шаге 3. Внесите следующие изменения в /etc/nginx/conf.d/frontend.conf:- Закомментируйте (или удалите) директиву auth_jwt_key_file.
- Раскомментируйте директиву auth_jwt_key_request. (Параметр
/_jwks_uri
относится к значению переменной$oidc_jwt_keyfile
, которое будет установлено на следующем шаге.) - Обновите параметр "default" директивы
map $host $oidc_jwt_keyfile
значением, полученным из поляjwks_uri
в Шаге 3 (в этом руководстве,http://<casdoor-server-address>/.well-known/jwks
).
- В NGINX Plus R16 и более ранних версиях, или если предпочтительно, файл JWK должен быть расположен на локальном диске. Следуйте этим шагам:
- Скопируйте содержимое JSON из файла JWK, указанного в поле
jwks_uri
в Шаге 3 (в этом руководстве,http://<casdoor-server-address>/.well-known/jwks
) в локальный файл (например,/etc/nginx/my_casdoor_jwk.json
). - В /etc/nginx/conf.d/openid_connect_configuration.conf измените параметр "default" директивы
map $host $oidc_jwt_keyfile
на путь к локальному файлу.
- Скопируйте содержимое JSON из файла JWK, указанного в поле
- В NGINX Plus R17 и более поздних версиях NGINX Plus может напрямую читать файл JWK из URL, указанного как
Убедитесь, что пользователь, указанный в директиве user в файле конфигурации NGINX Plus (обычно /etc/nginx/nginx.conf), имеет права на чтение файла JWK.
Тестирование
Откройте браузер и введите адрес вашего экземпляра NGINX Plus. Затем попробуйте войти, используя учетные данные пользователя, которому назначена роль NGINX Plus.
Устранение неполадок
Пожалуйста, обратитесь к разделу Устранение неполадок в репозитории nginx-openid-connect на GitHub.