запрос https в другой домен с перенаправлением с использованием переполнения стека

У меня есть ссылка для автоматического входа на один домен — этот домен используется для авторизации:

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
}

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

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

0

Решение

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

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

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

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

    https: // имя пользователя: password@example.com

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

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

    https://example.com?key=DgGyC28Sw3eQFvY9hz2dBkfmCa5zMgV6nN4Jj8VeD76chf7

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

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

0

Другие решения

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

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

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

Для отправки данных POST с запросом необходимо установить CURLOPT_POST возможность true а также CURLOPT_POSTFIELDS в массив данных POST или строки в кодировке URL.

Как только запрос CURL выполнен, вы можете узнать всю информацию о нем по curl_getinfo функция. Называя это с CURLINFO_REDIRECT_COUNT как 2-й параметр даст количество перенаправлений, и 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';
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector