Nginx
Увімкніть одноразовий вхід на основі OpenID Connect для додатків, проксійованих NGINX Plus, використовуючи Casdoor як провайдера ідентичності (IdP).
Цей посібник пояснює, як увімкнути одноразовий вхід (SSO) для додатків, які проксіюються NGINX Plus. Рішення використовує OpenID Connect як механізм аутентифікації, з Casdoor як провайдером ідентичності (IdP) та NGINX Plus як залежною стороною.
See also: NGINX Plus OpenID Connect on GitHub.
Передумови
Інструкції передбачають, що у вас є наступне:
-
Запущений сервер Casdoor. See Server installation and Try with Docker.
-
Підписка на NGINX Plus та NGINX Plus R15 або новіші. Для інструкцій з інсталяції дивіться NGINX Plus Admin Guide.
-
Модуль NGINX JavaScript, який необхідний для обробки взаємодії між NGINX Plus та IdP, NGINX JavaScript module. Після інсталяції 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 для завантаження модуля NGINX JavaScript:
load_module modules/ngx_http_js_module.so;
Налаштування Casdoor
Примітка: Наступна процедура відображає графічний інтерфейс користувача Casdoor на момент публікації, але інтерфейс може змінюватися. Використовуйте цей посібник як довідник та адаптуйте до поточного графічного інтерфейсу користувача Casdoor за необхідності.
Щоб створити клієнт Casdoor для NGINX Plus у графічному інтерфейсі користувача Casdoor, виконайте наступні кроки:
-
Log in to your Casdoor account at
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).
-
Record the Client ID and Client Secret; you will use them in Step 4 of Configuring 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
{
"authorization_endpoint": "https://<casdoor-server-address>/login/oauth/authorize",
"...":"...",
"token_endpoint": "http://<casdoor-server-address>/api/login/oauth/access_token",
"...":"...",
"jwks_uri": "http://<casdoor-server-address>/.well-known/jwks",
"...":"...",
} -
Відкрийте /etc/nginx/conf.d/openid_connect_configuration.conf за допомогою вашого улюбленого текстового редактора. Змініть значення параметра "default" для кожної з наступних директив map на вказані значення:
map $host $oidc_authz_endpoint– Use the value of theauthorization_endpointfrom Step 3 (in this guide,https://<casdoor-server-address>/login/oauth/authorize)map $host $oidc_token_endpoint– Use the value of thetoken_endpointfrom Step 3 (in this guide,http://<casdoor-server-address>/api/login/oauth/access_token)map $host $oidc_client– Use the value in the Client ID field from Step 4 of Configuring Casdoormap $host $oidc_client_secret– Use the value in the Client Secret field from Step 2 of Configuring Casdoormap $host $oidc_hmac_key– Використовуйте унікальну, довгу та безпечну фразу
-
Налаштуйте файл JWK залежно від версії NGINX Plus, яку ви використовуєте:
- In NGINX Plus R17 and later, NGINX Plus can directly read the JWK file from the URL specified as
jwks_uriin Step 3. Зробіть наступні зміни у /etc/nginx/conf.d/frontend.conf:- Закоментуйте (або видаліть) директиву auth_jwt_key_file.
- Розкоментуйте директиву auth_jwt_key_request. (Параметр
/_jwks_uriвідноситься до значення змінної$oidc_jwt_keyfile, яке буде встановлено на наступному кроці.) - Update the "default" parameter of the
map $host $oidc_jwt_keyfiledirective to the value obtained from thejwks_urifield in Step 3 (in this guide,http://<casdoor-server-address>/.well-known/jwks).
- У NGINX Plus R16 та раніших, або якщо це бажано, файл JWK має бути розташований на локальному диску. Виконайте наступні кроки:
- Copy the JSON contents from the JWK file specified in the
jwks_urifield in Step 3 (in this guide,http://<casdoor-server-address>/.well-known/jwks) to a local file (e.g.,/etc/nginx/my_casdoor_jwk.json). - У /etc/nginx/conf.d/openid_connect_configuration.conf, змініть параметр "default" директиви
map $host $oidc_jwt_keyfileна шлях до локального файлу.
- Copy the JSON contents from the JWK file specified in the
- In NGINX Plus R17 and later, NGINX Plus can directly read the JWK file from the URL specified as
-
Переконайтеся, що користувач, вказаний у директиві user у файлі конфігурації NGINX Plus (зазвичай /etc/nginx/nginx.conf), має права на читання файлу JWK.
Тестування
Відкрийте браузер та введіть адресу вашого екземпляра NGINX Plus. Потім спробуйте увійти, використовуючи облікові дані користувача, якому було призначено роль NGINX Plus.
