Как я могу реализовать возможность единого входа с помощью Check_MK?

Я работаю над веб-сайтом типа приборной панели. У нас есть страница входа, реализованная на php, которая аутентифицируется на сервере LDAP. У нас также есть страница Check_MK, которая имеет собственный диалог входа в систему, который аутентифицируется на том же сервере LDAP. Я бы хотел, чтобы пользователю не приходилось повторно вводить свои учетные данные в диалоговом окне входа Check_MK. Я бы предпочел, чтобы учетные данные, введенные на нашей странице входа в php, передавались в Check_MK, чтобы аутентификация могла выполняться без взаимодействия с пользователем. Это возможно? Если да, то как мне это сделать?

Отредактируйте для тех, кто пометил это как слишком широкое, поясните.

Мне удалось получить автоматический вход с помощью check_MK, передав имя пользователя и пароль через URL-адрес, как описано на этом веб-сайте: http://stichl.at/2014/04/check_mk-multisite-auto-login/
Я не думаю, что это будет жизнеспособным вариантом для меня, хотя поскольку это кажется небезопасным, как подробно описано в этом вопросе Безопасно ли передавать учетные данные для входа в виде обычного текста в URL-адрес HTTPS?

Несмотря на открытый исходный код, я не могу изменить файл checkMK login.py из-за его лицензии GNU. Помимо передачи учетных данных через URL-адрес в виде обычного текста, как я могу использовать учетные данные, предоставленные моей странице входа в php, для автоматического входа на страницу check_MK?

Ниже приведен код php / html, в котором я открываю экран входа в систему Check_MK.

<script type="text/javascript">
    var version = global.dashboard_version;
    console.log("version = " + version);
    var url = global.ips[version+"_nagios_iframe"];
    var suffix = <?php echo "'".
        '&_username='.
        $_SESSION['username'].
        '&_password='.
        $_SESSION['password'].
        "&_login=1'";?>;          
    console.log("suffix = "+suffix); 
url = url + suffix;
console.log("url = "+url); 
document.getElementById("nagiosiframe").src = url;
</script>

Код для входа в Check_MK можно найти здесь: https://github.com/sileht/check_mk/blob/master/web/htdocs/login.py

Соответствующая функция называется do_login и находится в строке 147.

В частности, я не знаю, как безопасно передать значения переменных сеанса (имя пользователя и пароль) коду login.py.

Это мое первое знакомство с любым из этих языков и технологий. Приветствуются даже предложения по поисковому запросу.


person Justin Wiseman    schedule 04.05.2015    source источник
comment
Это слишком общий вопрос, потому что вы не показали, где именно в вашем конкретном коде вы застряли. Stack Overflow предназначен для предоставления конкретных решений конкретных проблем, а не для написания целых реализаций.   -  person mhlester    schedule 06.05.2015
comment
Вы должны быть в безопасности, если отправляете POST через https, когда следуете stichl.at/2014/04/check_mk-multisite-auto-login. Отправная точка с использованием jquery: $.post("https://somewebhost/site/check_mk/", {"_username": "user", "_password": "pass", "_login": 1});   -  person Honore Doktorr    schedule 06.05.2015
comment
Спасибо, Оноре, мы смогли получить решение на основе сообщений + https на основе вашего фрагмента кода.   -  person Justin Wiseman    schedule 08.05.2015


Ответы (1)


Джастин,

Поскольку вы не можете изменить код для страницы check_mk, вы должны передать ей учетные данные. если этого ограничения не было, существует множество безопасных способов сделать это.

Теперь с этим ограничением, это вариант, который я использовал в прошлом и мог бы работать на вас.

Шаг 1. В вашем PHP-коде у вас есть доступ к исходному паролю ... (храните его в надежном месте) Шаг 2. В рамках транзакции (все или ни одной, выполните следующие действия) a. Установите пароль в ldap для этого конкретного пользователя на случайный пароль, который вы только что сгенерировали. B. Передайте этот пароль на страницу check_mk c. как только аутентификация будет завершена, со своей страницы PHP верните исходный пароль ldap.

Таким образом, вы не будете передавать реальный пароль, а также будете выполнять единый вход между вашим php и страницей check_mk.

Если бы вы могли изменить check_mk, я бы дал вам другие ответы. Сообщите мне, если это сработает.

person Anirban Mukherji    schedule 07.05.2015