Вход в Google с Android и токен авторизации для сервера

Я пытаюсь сгенерировать код аутентификации сервера в android

gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))
            .requestServerAuthCode(getString(R.string.server_client_id), false)
            .build();

Затем я попытался получить такой код авторизации сервера.

result.requestServerAuthCode(getString(R.string.server_client_id), false)

Предположим, у меня есть токен авторизации, например «бла-бла-бла»;

Затем, используя laravel socialite, я пытаюсь получить пользователя на стороне сервера

Socialize::driver('google')->userFromToken('bla bla bla')

Это показывает мне ошибку

GuzzleHttp \ Exception \ ClientException с сообщением 'Ошибка клиента: ПОЛУЧИТЕ https://www.googleapis.com/plus/v1/people/me?prettyPrint=false привел к ответу 401 Unauthorized`: {"error": {"errors": [{"domain": "global", "cause ":" authError "," message ":" Недействительные учетные данные "," locationType ":" header "," loc (усечено ...)


person Anand Siddharth    schedule 03.08.2016    source источник
comment
Используйте этот код аутентификации, чтобы получить токен доступа, см. developers.google.com/identity/protocols/OAuth2, затем используйте токен доступа для этой конечной точки.   -  person BNK    schedule 03.08.2016
comment
Спасибо за ответ! Я искал это в сети. не могли бы вы показать мне, как получить access_token с php или просто curl @BNK   -  person Anand Siddharth    schedule 03.08.2016
comment
Извините, я не знаком с php и curl, однако я думаю, что вы можете найти больше на github .com / google / google-api-php-client и stackoverflow.com/questions/28390718/   -  person BNK    schedule 03.08.2016
comment
получил в любом случае спасибо   -  person Anand Siddharth    schedule 03.08.2016
comment
@AnandSiddharth Не могли бы вы помочь мне, даже если я тоже нахожусь в той же фазе, я пытаюсь понять это с помощью плагина laravel socialite   -  person user3470929    schedule 02.12.2016
comment
@AnandSiddharth, нужно ли нам использовать для этого клиентскую библиотеку Google?   -  person user3470929    schedule 04.12.2016
comment
@AnandSiddharth Вы не упомянули область действия и поэтому получили сообщение об ошибке. т.е. Socialize::driver('google')->scopes(['profile','email'])->userFromToken('bla bla bla')   -  person Sushant Pimple    schedule 19.06.2018


Ответы (2)


На самом деле код, отправленный google на android, не является токеном доступа для получения токена доступа, вы можете сделать это на контроллере laravel.

Установите эту библиотеку композитора https://github.com/pulkitjalan/google-apiclient

$client = new \PulkitJalan\Google\Client(['client_id' => 'YOUR_CLIENT_ID', 'client_secret' => 'YOUR_SECRET', 'redirect_uri' => 'YOUR_REDIRECT_URI', 'developer_key' => 'YOUR_KEY']);
$google = $client->getClient();
$google->authenticate($token);
$access_token = $client->getAccessToken()["access_token"];

//and now here you go
$user = Socialize::driver('google')->userFromToken($access_token);
person Anand Siddharth    schedule 05.12.2016
comment
Откуда взялась переменная $token в строке 3? - person Denitsa; 05.08.2020
comment
@Denitsa, токен поступает от клиента в виде почтового запроса, как уже упоминалось. - person Anand Siddharth; 22.08.2020

Самый простой способ - использовать класс Google_Client, предоставленный Google. вы можете найти его здесь

Теперь у вас есть два варианта:

  1. Вы можете отправить id_token на сервер и проверить его, как указано в ссылке, а затем просто получить информацию о пользователе из полученного объекта.
  2. Вы можете отправить на сервер backend_auth_code вместо id_token, а затем использовать метод fetchAccessTokenWithAuthCode ($ code) класса Google_Client. Это дает вам токен доступа, токен идентификатора и другие вещи. Затем вы можете использовать этот access_token с Laravel Socialite.

    $client = new Google_Client([
        'client_id' => config('services.google.client_id'),
        'client_secret' => config('services.google.client_secret')
    ]);
    
    $data = $client->fetchAccessTokenWithAuthCode($code);
    
    $user = Socialite::driver('google')->scopes(['profile','email'])->userFromToken($data['access_token']);
    
person gencblakqori    schedule 11.03.2017