使用Socialite验证Google令牌ID

时间:2016-01-07 11:43:55

标签: laravel oauth-2.0 google-oauth google-api-php-client laravel-socialite

我已经从谷歌生成的客户端Android应用程序中收到了token-id 如何使用社交名媛授权用户?
我现在正在使用google_api客户端,但它没有Socialte的便利。

4 个答案:

答案 0 :(得分:3)

使用PHP Google API客户端库

首先通过composer安装库

$作曲家需要google / apiclient

$client = new Google_Client(['client_id' => env('Google_CLIENT_ID')]);  // Specify the CLIENT_ID of the app that accesses the backend
$payload = $client->verifyIdToken($id_token);
if ($payload) {
  $userid = $payload['sub'];
  // If request specified a G Suite domain:
  //$domain = $payload['hd'];
} else {
  // Invalid ID token
}

有关更多详细信息,请检查

https://developers.google.com/identity/sign-in/android/backend-auth?authuser=2

答案 1 :(得分:0)

如果您想获取userinfo,您必须使用accessToken(有时需要openid)来获取它,最近我制作了一个laravel包来满足此请求,请点击此处:

https://github.com/Ray-Cheng/laravel-socialite-api

答案 2 :(得分:0)

如果您可以获取服务器验证码,则可以将其换成accessToken,并使用它来查询Google+ API。

在我的情况下,我使用的是cordova库

https://github.com/EddyVerbruggen/cordova-plugin-googleplus

这将为您提供(如果配置为“离线”)serverAuthCode

您可以将其发送到您的服务器。然后,要将其转换为accessToken,您可以调用此社交方法:

$driver = Socialite::driver($provider); // provider is 'google' here
$access_token = $driver->getAccessToken($serverAuthCode);

然后您可以使用此令牌获取用户信息:

$socialUser = $driver->userFromToken($access_token);

只是想帮助那些正在努力解决这个问题的人。

答案 3 :(得分:-1)

您不需要google_api依赖项。只需更改Socialite类中的URI,这有助于从Google帐户中检索个人资料信息。

1)转到供应商 - > laravel - >社交名媛 - > src - >二 - > GoogleProvider.php类

2)通过替换以下URL

来更改getUserByToken函数
protected function getUserByToken($token)    {

    $response = $this->getHttpClient()->get('https://www.googleapis.com/oauth2/v3/tokeninfo?', [
        'query' => [
            'id_token' => $token,
        ],
        'headers' => [
            'Accept' => 'application/json',
            'Authorization' => 'Bearer '.$token,
        ],
    ]);

    return json_decode($response->getBody(), true);
}

3)分配以下值,谷歌将这些值返回到您的自定义对象或您需要继续进行的任何操作

protected function mapUserToObject(array $user)
{

    return (new User)->setRaw($user)->map([
        'id' => $user['kid'], 'nickname' => Arr::get($user, 'given_name'), 'name' => $user['name'],
        'email' => $user['email'], 'avatar' => Arr::get($user, 'picture'),
        'avatar_original' => preg_replace('/\?sz=([0-9]+)/', '', Arr::get($user, 'picture')),
    ]);
}