2016-03-30 2 views
0

Я являюсь владельцем веб-сайта (скажем, www.domain1.com), и я работаю с несколькими клиентами, у которых есть доступ к моему сайту с логином и паролем. Один из них рассказал мне об SSO. У него также есть веб-сайт (www.domain2.com), где пользователи должны войти в систему. Он хотел бы, чтобы на его сайте была кнопка, когда на нее нажимал зарегистрированный пользователь, он перенаправляет пользователя на мой сайт, и ему не нужно снова входить в систему.Использование SSO в php

Не могли бы вы рассказать мне, можно ли использовать SSO с OAuth2, и если да, то как?
Я прочитал this tutorial, но я не думаю, что это то, что я ищу - или, может быть, я не понимаю, учебник

+1

Может быть, это может быть любым Содействие? http://stackoverflow.com/questions/4873783/how-to-login-to-another-site-via-php – Naruto

+0

Для этого можно использовать SSO с OAuth2. domain2.com должен предоставить вам ключ и секретный ключ OAuth, а затем для каждого пользователя он должен будет предоставить токен OAuth. Остальное можно позаботиться об использовании http://php.net/manual/en/book.oauth.php – apokryfos

+0

спасибо @Naruto. Но имя пользователя/пароль для домена1 и домена2 не совпадают, поэтому он не может работать с cURL, не так ли? – Nevi

ответ

0

Итак, это то, что реальность материи.

OAuth позволяет вам (потребителю в этом случае) аутентифицировать пользователей через поставщика OAuth (domain2.com в этом случае), не предоставив пользователям свои учетные данные (поскольку они на самом деле не доверяют вам по какой-либо причине), а скорее хотят подписаться на домен2.com, кому они доверяют.

Чтобы сделать это в прямом (традиционном) направлении, вы предоставляете своим пользователям возможность входа в домен с доменом 2.com, который перенаправляет пользователя на домен2.com. Этот запрос нужно будет сделать с помощью ключа и секретности ваших приложений для создания подписи (PHP OAuth делает это для вас). Затем пользователь перенаправляется на домен2.com для входа и доступа к вашему домену. Затем пользователь будет перенаправлен на обратный вызов, который вы передаете domain2.com вместе с токеном доступа, который затем вы можете использовать для внесения дополнительных запросов на домен2.com от имени пользователя (если есть), который в вашем случае будет просто одним попросите проверить, работает ли токен, что означает его подлинность.

Чтобы сделать это в обратном направлении (как описано), domain2.com сделает то же самое более или менее, используйте свой ключ и секрет (который, как он знает), чтобы создать токен пользователя и перенаправить пользователя на URL-адрес, который вы предоставить их, чтобы вы могли получить токен и использовать его в качестве средства для проверки подлинности пользователя с помощью domain2.com. Чтобы сделать это, (который, по вашему мнению, зависит от того, что вам нужно), вам просто нужно, чтобы люди domain2.com знали, какой URL-адрес будет принимать их токен, а не что-то еще. Остальное - более или менее ответственность domain2.com.

Вся цель таблицы http://bshaffer.github.io/oauth2-server-php-docs/cookbook/ заключается в том, чтобы хранить токен пользователя, поэтому вам не нужно было бы их аутентифицировать на домене2.com каждый раз, однако это необязательно, и для вашего случая использования простое сохранение токена в сеансе может быть достаточным.

+0

Как я могу проверить, что токен действителен? Нужно ли хранить токен в моей базе данных? – Nevi

+0

Чтобы проверить, действительно ли это необходимо, вы должны сделать запрос на domain2.com через OAuth, используя этот токен. Если domain2.com дает ожидаемый ответ без жалоб, то токен действителен. Если вы получаете ошибку 403 (или аналогичную), то токен недействителен. Вам не нужно его хранить, но если вы его не храните, это означает, что пользователю нужно будет получить новый токен каждый раз, когда они посещают ваш сайт. Иногда это нормально (в вашем случае это нормально, если вы не храните его в базе данных и не держите его в сеансе). – apokryfos

+0

о логине, когда я получаю токен, откуда я знаю, что токен для конкретного пользователя? Должен ли я иметь что-то общее с domain2? Как и имя пользователя? Благодарим вас за ваши быстрые и ясные ответы. – Nevi

0

Отправка данных из домена 2 в домен 1 является простой частью.

Во-первых настроить Доменные 1 в HTAccess файл следующим образом:

Header set Access-Control-Allow-Origin "http://www.domain2.com" 

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^API /API/handler.php [QSA,L] 

Нам нужно переписывать для метода CORS (что позволяет сообщения междоменные)

Вы можете отправить это от Домен 2 до Домен 1 с использованием cURL запрос.

$params = array('email' => 'email here', 'password' => 'password here'); 
$url = "http://www.domain1.com/API/?"; 
foreach($params as $k => $v) 
{ 
    $url .= $k . "=" . $v . "&"; 
} 
$curl = curl_init(); 
curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $url, 
     CURLOPT_USERAGENT => 'Log in the User at Domain1 from Domain2' 
)); 

curl_exec($curl); 
curl_close($curl); 

header("Location: http://www.domain1.com"); 
exit; 

После того, как он попадет в другом конце, его к вам, чтобы написать обработчик и работать с присланными данными.

Теперь Вы можете написать handler.php файл внутри API каталога, который подхватывает запросы, как:

if(isset($_GET['email']) && isset($_GET['password'])) 
{ 
    // do something with the sent user... 
} 
Смежные вопросы