Как я могу войти на другой сайт и поддерживать сеанс в фоновом режиме, чтобы, если пользователь заходит на этот сайт, он уже вошел в систему - PullRequest
2 голосов
/ 05 мая 2019

Я пытаюсь создать портал, чтобы пользователи использовали единый вход для доступа ко всем службам в компании, в которой я работаю.

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

Я проверил форму входа в систему для каждого веб-сайта и получил URL-адреса сценариев входа в систему вместе с именами переменных полей имени пользователя и пароля, затем я попытался отправить запросы POST к этим сценариям, используя cURL в PHP с учетными данными в Опция "CURLOPT_POSTFIELDS".

    $cookie_file_path = getcwd() . '/cookie.txt';
    $agent = $_SERVER['HTTP_USER_AGENT'];
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL,'http://example.com/login.php');
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookie_file_path);

    $loginpage_html = curl_exec ($ch);

    curl_close ($ch);

    $CREDENTIALS = "username=test&password=test";  

    $ch = curl_init(); 


    curl_setopt($ch, CURLOPT_URL,'http://example.com/login.php');
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$CREDENTIALS); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_REFERER, 'http://example.com/login.php');
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookie_file_path);

    $logon_result = curl_exec ($ch);
    echo $logon_result;

Токовый выход: Пользователи автоматически входят в систему на всех веб-сайтах, когда они входят в мой портал, но при попытке навигации похоже, что они не вошли в систему в первую очередь, как если бы сеанс был разрушен, даже если сначала он показывает, что вы вошли в систему. в.

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

И, как новичок, я хочу спросить, действительно ли это хороший способ достижения единого входа в PHP и Active Directory или есть лучший способ сделать это.

Спасибо.

1 Ответ

0 голосов
/ 05 мая 2019

Я думаю, что ваш код не может войти в систему, потому что файлы cookie сеанса не сохраняются в веб-браузере клиента. По соображениям безопасности ваш сайт не сможет создать cookie для другого сайта. Поскольку у ваших пользователей нет файла cookie сеанса для целевого сайта, они будут рассматриваться как новый пользователь.

Более распространенным способом получения единого знака было бы использование SAML. Поскольку вы упомянули, что ваша компания использует Active Directory, вы можете использовать ADFS в качестве поставщика удостоверений. Некоторые из ваших корпоративных приложений могут уже поддерживать проверку подлинности SAML.

...