Я заинтересован в реализации OpenID, и я читал об этом, но есть еще несколько аспектов, о которых я немного смущен.
Я видел несколько блок-схем взаимодействия и пошаговых деталей, таких как этот , но все они пропускают сведения о том, что происходит при успешном входе в систему. Все, что я читал, говорит что-то вроде строки «после успешного входа в систему, пользователь перенаправляется обратно на сайт». Ну, как мой сайт знает, что логин прошел успешно? Являются ли cookie установленными, я получаю POST обратно, что-то еще?
Например, вот подробности из ссылки, которую я включил
9. User POSTs response to OpenID Server. 10. User is redirected to either the success URL or the failure URL returned in (5) depending on the User response //this is the step that it says tells me I've had a succes/failure upon login 5. Consumer inspects the HTML document header for <link/> tags with the attribute rel set to openid.server and, optionally, openid.delegate. The Consumer uses the values in these tags to construct a URL with mode checkid_setup for the Identity Server and redirects the User Agent. This checkid_setup URL encodes, among other things, a URL to return to in case of success and one to return to in the case of failure or cancellation of the request
Я не совсем уверен, как это интерпретировать. Что конкретно говорит мне, что логин был успешным? Из того, что я собираю, кажется, что что-то в заголовке задано, но как мне получить к нему доступ? Предполагая, что я узнал, что логин был успешно зарегистрирован, означает ли это, что я могу продолжить и перейти к настройке файлов cookie / сеансов, относящихся к моему сайту?
edit- Я нашел LightOpenID, и он, похоже, соответствует моим потребностям, но я все еще немного не уверен в чем-то
Я протестировал его на локальном хосте и получил логин google для работы. При входе в систему я получаю URL-адрес, например
User https://www.google.com/accounts/o8/id?id=sdlkfjlkwliej9392010fjos has logged in.
Проверяя код, он генерируется следующим
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
Я предполагаю, что это означает, что я просто проверяю $ openid-> validate () для входа? Будет ли идентификатор $ openid-> одинаковым для каждой учетной записи Google? Я предполагаю, что да, иначе не было бы способа отслеживать пользователя каждый раз. Если пользователь вошел в систему, я могу установить файлы cookie, сеансы и любые другие интересные вещи, которые я считаю необходимыми, не так ли?
Вот какой код я использую:
require '../../php/lightopenid-lightopenid/openid.php'; if( isset( $_COOKIE[ 'claimed_id' ] )) { $claimed_id = $_COOKIE[ 'claimed_id' ]; try { if(!isset($_GET['openid_mode'])) { $openid = new LightOpenID; $openid->identity = 'https://www.google.com/accounts/o8/id'; header('Location: ' . $openid->authUrl()); } elseif($_GET['openid_mode'] == 'cancel') { unset( $claimed_id ); setcookie( "claimed_id", 0, time() - 3600, "/" ); } else { $openid = new LightOpenID; if( $openid->validate() ) { // different login if ( $_REQUEST[ 'openid_claimed_id' ] != $claimed_id ) { unset( $claimed_id ); setcookie( "claimed_id", 0, time() - 3600, "/" ); } } else { // cant validate unset( $claimed_id ); setcookie( "claimed_id", 0, time() - 3600, "/" ); } } } catch(ErrorException $e) { echo "Authentication error."; error_log( $e->getMessage() ); exit; } } // fall through to rest of code...