В настоящее время человек, для которого я разрабатываю, использует Google Docs для отображения веб-сайта / файлов. К которым можно получить доступ только через аккаунты Google, оканчивающиеся на определенное доменное имя. Например, [email protected], если это учетная запись Google для веб-тестирования, он может получить к ней доступ.
Сейчас я создаю им сайт, не связанный с Google. Однако мне все еще нужен этот процесс аутентификации.
Первый шаг
Страница входа будет простой «связаться с учетной записью Google»
Шаг второй
Пользователь перенаправляется для входа в Google, если он уже вошел в систему, то переходит к следующему шагу.
Шаг третий адрес электронной почты перепроверяется с моей базой данных, если для идентификатора строки этого пользователя создается сеанс, если нет, то он добавляется.
Я стараюсь сделать это как можно более простым, однако понятия не имею, где и как выполнить второй шаг.
Прочитав введение в Википедию, упомянутое @Izzy, вы можете посмотреть при введении Google Oauth2 а затем прыгнуть в Пример быстрого приложения Google; он предоставляет полностью работающее приложение php с комментариями, которое использует oauth 2.0 для аутентификации с помощью учетной записи Google и получения пользовательских данных.
Код в примере использует пакет Google-апи-PHP-клиент а также библиотеку js для упрощения работы с API. Для стороны клиента / внешнего интерфейса вызовы javascript, такие как:
auth2.signIn().then(function(googleUser) {
onSignInCallback(googleUser.getAuthResponse());
}, function(error) {
alert(JSON.stringify(error, undefined, 2));
});
И на сервере, сторона php:
$code = $request->getContent();
// Exchange the OAuth 2.0 authorization code for user credentials.
$client->authenticate($code);
$token = json_decode($client->getAccessToken());
// You can read the Google user ID in the ID token.
// "sub" represents the ID token subscriber which in our case
// is the user ID. This sample does not use the user ID.
$attributes = $client->verifyIdToken($token->id_token, CLIENT_ID)
->getAttributes();
$gplus_id = $attributes["payload"]["sub"];
// Store the token in the session for later use.
$app['session']->set('token', json_encode($token));
$response = 'Successfully connected with token: ' . print_r($token, true);
Обратите внимание, что запрос адреса электронной почты потребует дальнейшего разрешения (по имени Authorization scopes
) от клиента, как видно в этом вопросе:
$client->setScopes(array('https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/userinfo.profile'));
Затем вы можете использовать любое количество API, которые предоставляют userinfo.email. Один из них, Google_Service_Oauth2
Имеет полезный публичный метод userinfo
$oauth2Service = new Google_Service_Oauth2(...);
$userinfo = $oauth2Service->userinfo;
использование OAuth2. Google использует его для аутентификации.
OAuth заявляет для открытой авторизации. OAuth — это протокол, разработанный для работы с HTTP, позволяющий токенам доступа вызывать проблемы у сторонних клиентов с помощью аутентификационного сервера с действием пользователя от одобрения.
OAuth начинает устаревать, и все крупные компании начинают использовать протокол OAuth2, который является улучшенной версией OAuth, но, к сожалению, он не имеет обратной совместимости.
Вы можете найти несколько реализаций в PHP как этот.