2015-03-02 2 views
0

У меня есть авто-входа ссылку на один домен - это домен используется для авторизации:HTTPS запрос в другой домен с переадресацией с помощью PHP

https://example.com/api/login/{key}/{username}

После этой ссылке, пользователь перенаправляется в панель управления:

https://example.com

Если что-то не так - пользователь перенаправляется на

https://example.com/login page.

В другом домене example2.com пользователи имеют биллинговую панель и в ней находится ссылка https://example.com/api/login/{key}/{username}.

Так что мне нужно сделать чек от example2.com до example.com, как это:

$url = https://example.com/api/login/{key}/{username}; 
if function-to-check-autologin($url) == "true" { 
    //do something 
} 

Мой результат поиска является локон, но я не могу Конфигурировать запрос самостоятельно.

Как я мог это сделать? завиток или по-другому?

+0

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

+0

example.url - этот домен делает автоматический вход. проверить запрос из другого домена – raskalbass

+0

@raskalbass Итак, вы хотите сделать запрос POST с вашими учетными данными и узнать, на какой URL он перенаправляется сервером. Правильно ли я понял? – hindmost

ответ

0

Вы не объяснили, что такое «автоматический вход» или как он работает. Все ваши домены являются «example.com», поэтому они все одинаковые. Несомненно, вы не позволяете людям понять ваш вопрос. Я попытаюсь указать, как я это понимаю.

У вас есть пользователь вошел в одной интернет-домена, и вы хотите, чтобы перенаправить их на второй домен, где они должны оставаться в системе.

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

  1. Если вы используете стандартный метод HTTP Входа можно перенаправить на второй домен с:

    https://username:[email protected]

Поскольку вы указываете, что вы используете сертификат SSL на обоих сайтах, которые будут быть разумным в безопасности. Это будет работать, даже если вы не используете базу данных.

  1. Если оба домена используют одну и ту же базу данных, вы можете передать зашифрованную ссылку на зарегистрированный сеанс пользователя. Так я обычно это делаю. Я сохраняю сеансы в своей базе данных, и каждый сеанс имеет идентификатор. Я зашифровать, что любой хороший метод будет делать, и отправить его на второй домен, где я расшифровывать это так:

    https://example.com?key=DgGyC28Sw3eQFvY9hz2dBkfmCa5zMgV6nN4Jj8VeD76chf7

Конечно сама сессия должна вам сказать ли зарегистрирован пользователь Убедитесь, что ваш метод шифрования безопасен.

В обоих случаях, если URL-адрес попадает в чужие руки, логин может быть поддельным. Вот почему использование SSL важно, но некоторые риски остаются.

+0

Извините, но вы не понимаете вопроса, поэтому я немного его отредактировал – raskalbass

+0

Ах, вы хотите сделать это наоборот. Проверьте со второго домена, чтобы пользователь вошел в систему первым. Это довольно просто: сделайте страницу в первом домене, которая вернет «правильное» при входе в систему и «неправильно», когда не войдет в систему, и отреагируйте на этот ответ во втором домене. –

+0

спасибо, что это может быть ответ, но как насчет варианта без выпуска на example.com? – raskalbass

0

Хотя ваш вопрос неясен, я бы дал вам некоторые подсказки.

Прежде всего, вы должны установить CURLOPT_SSL_VERIFYPEER вариант false, если вы не собираетесь иметь дело с сертификатом сверстника.

Также вы должны указать CURL обрабатывать перенаправления. Предположим, что вы установили опцию CURLOPT_FOLLOWLOCATION, а также CURLOPT_MAXREDIRS и CURLOPT_AUTOREFERER.

Для того, чтобы отправить данные POST с запросом, необходимо установить в поле значение true и CURLOPT_POSTFIELDS в массив POST-данных или строку с кодировкой url.

Как только запрос CURL будет выполнен, вы можете узнать всю информацию о нем по функции curl_getinfo. Вызов с CURLINFO_REDIRECT_COUNT в качестве второго параметра даст количество переадресаций, а CURLINFO_EFFECTIVE_URL - последний эффективный URL.

Поэтому код может выглядеть следующим образом:

$ch = curl_init(); 
curl_setopt_array($ch, array(
    CURLOPT_URL => $url, 
    CURLOPT_NOBODY => false, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_MAXREDIRS => 1, 
    CURLOPT_AUTOREFERER => true, 
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => $data_array, 
)); 
$response = curl_exec($ch); 
if (curl_getinfo($ch, CURLINFO_REDIRECT_COUNT) == 1 && curl_getinfo($ch, CURLINFO_EFFECTIVE_URL) == $sample_redirect_url) 
    echo 'OK'; 
Смежные вопросы