谷歌从Android和Access登录服务器的身份验证令牌

时间:2016-08-03 07:58:28

标签: android laravel google-signin google-login laravel-socialite

我正在 android

生成服务器 auth 代码
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)

假设我有一个像#bla; bla bla bla&#39 ;;

这样的身份验证令牌

然后使用laravel socialite我试图让用户在服务器端

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

它显示错误

  

GuzzleHttp \ Exception \ ClientException,带有消息'客户端错误:GET https://www.googleapis.com/plus/v1/people/me?prettyPrint=false导致401 Unauthorized`响应:   {"错误" {"错误":[{"结构域":"全球""理由":& #34; authError","消息":"无效的凭证"," locationType":"标题"," loc (截...)

2 个答案:

答案 0 :(得分:2)

实际上谷歌在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);

答案 1 :(得分:1)

最简单的方法是使用Google提供的Google_Client类。你可以找到它here

现在,你有两个选择:

  1. 您可以向服务器发送 id_token ,并按照链接说明对其进行验证,然后从收到的对象中获取用户信息。
  2. 您可以将 backend_auth_code 发送到服务器而不是 id_token ,然后使用方法 fetchAccessTokenWithAuthCode($ code)< Google_Client类的/ em> 。这为您提供了访问令牌,ID令牌和其他内容。然后,您可以将 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']);