Перейти к основному содержанию

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, выполните следующие шаги:

  1. Войдите в свою учетную запись Casdoor по адресу http://your-casdoor-url.com/login/.

  2. В верхней навигационной колонке нажмите Application. На открывшейся странице Application нажмите кнопку Add в верхнем левом углу.

    addApp

  3. На открывшейся странице Edit Application измените значение в полях Name и Display name на имя приложения, для которого вы включаете SSO. Здесь мы используем NGINX Plus.

    appName

    В поле Redirect URLs введите URL-адрес экземпляра NGINX Plus, включая номер порта и заканчивая на /_codexch (в этом руководстве это https://your-site-url.com:443/_codexch).

    redirectURL

    Примечания:

    • Для производства настоятельно рекомендуем использовать SSL/TLS (порт 443).
    • Номер порта обязателен, даже если вы используете стандартный порт для HTTP (80) или HTTPS (443).
  4. Запишите значения в полях Client ID и Client Secret. Вы скопируете их в файл конфигурации NGINX Plus в Шаге 4 Настройки NGINX Plus.

    Клиент

  5. Нажмите Roles в верхней навигационной колонке, затем нажмите кнопку Add в верхнем левом углу открывшейся страницы.

    addRole

  6. На открывшейся странице Add введите значение в полях Name и Display Name (здесь это nginx-casdoor-role) и нажмите кнопку Save.

    roleName

  7. В верхней навигационной колонке нажмите Users. На открывшейся странице Users либо нажмите Edit, чтобы отредактировать одного из существующих пользователей, либо нажмите кнопку Add в верхнем левом углу, чтобы создать нового пользователя.

  8. На открывшейся странице Add измените Name и Display Name по своему усмотрению (здесь это user1).

    userName

    Выберите NGINX Plus в поле Signup application.

    signupApp

    В поле Managed accounts выберите NGINX Plus в Application и заполните имя пользователя и пароль.

    managedAcc

  9. Вернитесь на страницу Roles и нажмите Edit в строке nginx-casdoor-role. На открывшейся странице в поле Sub users выберите только что созданное имя пользователя (здесь это built-in/user1).

    subUsers

Настройка NGINX Plus

Чтобы настроить NGINX Plus в качестве доверяющей стороны OpenID Connect, выполните следующие шаги:

  1. Начните с создания клонирования репозитория GitHub nginx-openid-connect:

    git clone https://github.com/nginxinc/nginx-openid-connect
  2. Скопируйте следующие файлы из клонирования в директорию /etc/nginx/conf.d:

    • frontend.conf
    • openid_connect.js
    • openid_connect.server_conf
    • openid_connect_configuration.conf
  3. Получите URL-адреса для точки авторизации, точки токена и файла JSON Web Key (JWK) из конфигурации Casdoor. Откройте терминал и выполните следующую команду curl, передав вывод указанной команде python, чтобы сгенерировать читаемый формат конфигурации. Для краткости мы сократили вывод, чтобы отобразить только соответствующие поля.

    curl http://<casdoor-server-address>/.well-known/openid-configuration | python -m json.tool
  4. Откройте /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 Настройки Casdoor
    • map $host $oidc_client_secret – Используйте значение в поле Client Secret из Шага 2 Настройки Casdoor
    • map $host $oidc_hmac_key – Используйте уникальную, длинную и безопасную фразу
  5. Настройте файл JWK в зависимости от используемой версии NGINX Plus:

    • В NGINX Plus R17 и более поздних версиях NGINX Plus может напрямую читать файл JWK из URL, указанного как jwks_uri в Шаге 3. Внесите следующие изменения в /etc/nginx/conf.d/frontend.conf:
      1. Закомментируйте (или удалите) директиву auth_jwt_key_file.
      2. Раскомментируйте директиву auth_jwt_key_request. (Параметр /_jwks_uri относится к значению переменной $oidc_jwt_keyfile, которое будет установлено на следующем шаге.)
      3. Обновите параметр "default" директивы map $host $oidc_jwt_keyfile значением, полученным из поля jwks_uri в Шаге 3 (в этом руководстве, http://<casdoor-server-address>/.well-known/jwks).
    • В NGINX Plus R16 и более ранних версиях, или если предпочтительно, файл JWK должен быть расположен на локальном диске. Следуйте этим шагам:
      1. Скопируйте содержимое JSON из файла JWK, указанного в поле jwks_uri в Шаге 3 (в этом руководстве, http://<casdoor-server-address>/.well-known/jwks) в локальный файл (например, /etc/nginx/my_casdoor_jwk.json).
      2. В /etc/nginx/conf.d/openid_connect_configuration.conf измените параметр "default" директивы map $host $oidc_jwt_keyfile на путь к локальному файлу.
  6. Убедитесь, что пользователь, указанный в директиве user в файле конфигурации NGINX Plus (обычно /etc/nginx/nginx.conf), имеет права на чтение файла JWK.

Тестирование

Откройте браузер и введите адрес вашего экземпляра NGINX Plus. Затем попробуйте войти, используя учетные данные пользователя, которому назначена роль NGINX Plus.

тест

Устранение неполадок

Пожалуйста, обратитесь к разделу Устранение неполадок в репозитории nginx-openid-connect на GitHub.