2015-05-04 1 views
6

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

Редактировать для тех, кто отметил это слишком широк, объясните, пожалуйста.

Я был в состоянии получить автоматический вход в систему с check_mk, передавая имя пользователя и пароль в через URL, как описано на этом сайте: http://stichl.at/2014/04/check_mk-multisite-auto-login/
Я не думаю, что это будет жизнеспособным вариантом для меня, хотя, как кажется чтобы быть небезопасным, как подробно описано в этом вопросе Is it secure to pass login credentials as plain text in an HTTPS URL?

Хотя с открытым исходным кодом я не могу изменить файл 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 безопасным способом.

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

+0

_Что такое LDAP? _ –

+0

Этот вопрос слишком широк, потому что вы не указали, где в вашем конкретном коде вы застряли.Stack Overflow предназначен для обеспечения конкретных решений конкретных проблем, а не для написания целых реализаций. – mhlester

+1

Вы должны быть защищены * если * вы отправляете POST через https, когда следуете инструкциям http://stichl.at/2014/04/check_mk-multisite-auto-login/. Исходная точка с использованием jquery: '$ .post (" https: // someebhost/site/check_mk/", {" _username ":" user "," _password ":" pass "," _login ": 1}); ' –

ответ

1

Джастин,

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

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

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

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

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