Настройка Simple#
Данный способ подключения приложения к Blitz Identity Provider можно применять при следующих условиях:
Приложение нельзя подключить к Blitz Identity Provider с использованием стандартных протоколов SAML или OIDC.
Приложение представляет собой веб-приложение, развернутое в собственной инфраструктуре (On-Premise). Доступ пользователей к приложениям можно организовать через реверсивный прокси-сервер.
Чтобы подключить приложение к Blitz Identity Provider по протоколу Simple, необходимо:
В настройках приложения в консоль управления выбрать протокол Simple и задать его настройки:
SSL – настройка, указывающая, производится ли за прокси вызов подключаемого по Simple приложения по HTTP или по HTTPS. Рекомендуется в качестве прокси-сервера, защищающего приложение, использовать существующий веб-сервер приложения, и в таком случае соединение прокси-сервера с приложением будет осуществляться без TLS/SSL шифрования.
Селектор формы – задается CSS-селектор, позволяющий определить положение формы входа на странице подключаемого приложения.
Селектор поля с логином – задается CSS-селектор, позволяющий определить положение поля ввода логина на странице входа подключаемого приложения.
URL выхода по умолчанию (опциональная настройка) – указывает, какой адрес должен вызвать Blitz Identity Provider при необходимости инициировать логаут в подключенном по Simple приложении в случае единого логаута в Blitz Identity Provider.
URL для перехода после успешного выхода – указывает, какой адрес должен вызвать Blitz Identity Provider для перенаправления пользователя после успешного логаута, инициированного подключенным по Simple приложением.
JavaScript (опциональная настройка) – встраиваемый в страницу входа подключаемого по Simple приложения JS-код, позволяющий обработать полученный от приложения ответ с результатами входа (проверить, что вход произведен успешно) и показать об этом ошибку в Blitz Identity Provider.
Пример значения:
var fm = document.querySelector('form[name=login]'); if (fm) { document.body.style.display = "none"; var err = document.getElementById('lost-password'); var errKey = err && err.innerHTML.indexOf('Incorrect password.') !== -1 ? 'incorrect_password' : 'unknown_error'; var kvp = document.location.search.substr(1).split('&'); kvp.push([encodeURI('error'),encodeURI(errKey)].join('=')); window.location.search = kvp.join('&'); } var aLogout = document.querySelector('#logout'); var href = aLogout ? aLogout.getAttribute("href") : null; if (href) { var lp = encodeURIComponent(href); var slp = document.createElement('script'); slp.setAttribute('src', 'https://idp.company.com/blitz/simple/slp?app=app_id&lp=' + lp); document.head.appendChild(slp); }
Пример настроек протокола Simple для приложения представлен на рисунке ниже.
Задать настройки проксирования запросов к приложению на веб-сервере.
Пример конфигурационного файла для веб-сервера nginx:
map "" $idp_host { default <server hostname>:9000; } map "$http_Blitz_Idp" $idp_post_login { default "0"; "prepare-login" "1"; } map "$arg_passive" $activLogout { default "1"; "true" "0"; } upstream oc-web { server <application server hostname>:<application port>; } server { listen 80; server_name <application domain name>; # enforce https return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name <application domain name>; resolver 172.27.0.20 172.25.0.50 valid=300s; #resolver 8.8.8.8 valid=300s; #ssl_certificate /etc/nginx/cert/<path to SSL certificate>.pem; #ssl_certificate_key /etc/nginx/cert/<path to SSL certificate key>.pem; #ssl_certificate /etc/letsencrypt/live/app.company.com/fullchain.pem; # managed by Certbot #ssl_certificate_key /etc/letsencrypt/live/app.company.com/privkey.pem; # managed by Certbot access_log /var/log/nginx/oc-acs.log full; error_log /var/log/nginx/oc-err.log error; ### force timeouts if one of backend is died ## proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; ### Set headers #### proxy_set_header Accept-Encoding ""; 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; add_header Front-End-Https on; proxy_redirect off; proxy_set_header Cookie "$http_cookie;domain2auth=$host"; proxy_hide_header Content-Security-Policy; add_header Content-Security-Policy "default-src 'self' https://$idp_host; script-src 'self' https://$idp_host 'unsafe-eval'; img-src 'self' data: https://$idp_host; style-src 'self' 'unsafe-inline'; font-src 'self' data:; frame-src 'self'; connect-src 'self'"; location ~ <path to login page of the application>$ { #if ($http_referer ~* "/blitz/simple") { # set $idp_post_login "1"; #} if ($http_referer ~* "<main server domain name>") { set $idp_post_login "1"; } if ($idp_post_login = "1" ) { proxy_pass http://oc-web$request_uri; } if ($idp_post_login = "0" ) { proxy_pass http://$idp_host/blitz/simple/prepare$request_uri; break; } } location ~ /logout$ { if ($activLogout = "1") { return 302 https://<main server domain name>/blitz/simple/active_logout?app=$host; } proxy_pass http://oc-web$request_uri; } location / { proxy_pass http://oc-web; } }