Nginx
Увімкніть одноразовий вхід на основі OpenID Connect для додатків, проксійованих NGINX Plus, використовуючи Casdoor як провайдера ідентичності (IdP).
Цей посібник пояснює, як увімкнути одноразовий вхід (SSO) для додатків, які проксіюються NGINX Plus. Рішення використовує OpenID Connect як механізм аутентифікації, з Casdoor як провайдером ідентичності (IdP) та NGINX Plus як залежною стороною.
Дивіться також: Ви можете знайти більше інформації про інтеграцію NGINX Plus OpenID Connect у GitHub репозиторії проекту.
Передумови
Інструкції передбачають, що у вас є наступне:
Запущений сервер Casdoor. Дивіться документацію Casdoor для Server Installation та 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, виконайте наступні кроки:
Увійдіть у свій обліковий запис 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
{
"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
– Використовуйте значення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.
Усунення несправностей
Будь ласка, зверніться до розділу Troubleshooting у репозиторії nginx-openid-connect на GitHub.