Как я могу реализовать возможность единого входа с 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.

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

1 ответ

Джастин,

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

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

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

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

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

Другие вопросы по тегам