Как определить пользователя Google OAuth2?


Я использовал Facebook login для идентификации пользователей. Когда приходит новый пользователь, я храню его идентификатор пользователя в своей базе данных. В следующий раз, когда они придут, я узнал их идентификатор Facebook, и я знаю, какой пользователь находится в моей базе данных.

теперь я пытаюсь сделать то же самое с OAuth2 от Google, но как я могу распознать пользователей?

Google отправляет мне несколько кодов и токенов (access_token, id_token, refresh_token), однако ни один из них не является постоянным. Это означает, что если я выйду из системы и вернусь через 2 минуты позже, все 3 значения изменились. Как я могу однозначно идентифицировать пользователя?

Я использую их клиентскую библиотеку PHP:https://code.google.com/p/google-api-php-client/

6 54

6 ответов:

я вставил этот метод в google-api-php-client/src / apiClient.php:

public function getUserInfo() 
{
    $req = new apiHttpRequest('https://www.googleapis.com/oauth2/v1/userinfo');
    // XXX error handling missing, this is just a rough draft
    $req = $this->auth->sign($req);
    $resp = $this->io->makeRequest($req)->getResponseBody();
    return json_decode($resp, 1);  
}

Теперь я могу назвать:

$client->setAccessToken($_SESSION[ 'token' ]);
$userinfo = $client->getUserInfo();

она возвращает массив, как это (плюс электронная почта если эта область была запрошена):

Array
(
    [id] => 1045636599999999999
    [name] => Tim Strehle
    [given_name] => Tim
    [family_name] => Strehle
    [locale] => de
)

решение возникло из этой темы: https://groups.google.com/forum/#!msg/google-api-php-client/o1BRsQ9NvUQ/xa532MxegFIJ

как уже упоминалось, вы можете отправить GET to https://www.googleapis.com/oauth2/v3/userinfo, используя токен носителя OAuth2, который вы только что получили, и вы получите ответ с некоторой информацией о пользователе (id, имя и т. д.).

также стоит отметить, что Google реализует OpenID Connect и что эта конечная точка информации о пользователе является только одной ее частью.

OpenID Connect - это уровень аутентификации поверх OAuth2. При обмене авторизацией code в конечной точке токена Google вы получаете токен доступа (access_token параметр), а также маркер идентификатора OpenId Connect (

следует отметить, что OpenID Connect API возвращает no

"кто это?"по сути, это сервис; вы должны запросить доступ к нему как scope а затем сделать запрос в профиль Google ресурсов сервера чтобы получить удостоверение личности. Смотрите OAuth 2.0 для авторизации за подробностями.

Altough JWTs можно проверить локально с помощью открытого ключа, (клиентская библиотека Google APIs загружает и кэширует их открытые ключи автоматически) проверка маркера на стороне Google через https://www.googleapis.com/oauth2/v1/tokeninfo конечная точка необходима, чтобы проверить, был ли отменен доступ для приложения с момента создания токена.

скачать

OAuth2Sample.java