无需重定向即可从网络服务器访问Google MyBusiness

时间:2019-01-24 15:10:20

标签: google-api google-api-php-client google-my-business-api

my question向Google API小组所述,我想出一种避免重定向的方法。

从理论上讲,这应该是可能的,因为来自一个客户端(JavaScript)的身份验证代码应该与客户端无关,因此,如果传递给PHP客户端以获取访问和刷新令牌,则该身份验证代码应该可以工作。

理论上的步骤: 1.客户得到authorization code 2.客户交换accessrefresh令牌的授权代码

我该如何尝试?

  1. 运行JavaScript客户端以获取身份验证令牌
GoogleAuth = gapi.auth2.getAuthInstance()
GoogleAuth.grantOfflineAccess({
    scope: 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.business.manage https://www.googleapis.com/auth/plus.me openid email profile'
}).then(function (resp) {
    var auth_code = resp.code;
    console.log("AuthCode:" + auth_code)
})

这时我得到了一个代码,不确定是授权码还是访问令牌,但是我在Javascript库中看不到其他任何明确/特定的授权令牌功能。

  1. 使用PHP API库中的身份验证令牌
$error = $request->get('error');
        $code  = $request->get('code');

        if($error){
            throw new Exception('Error from authenticating ' . $error);
        }

        $client = new \Google_Client();
        $client->setAuthConfig(getcwd() . '/../client_secret.apps.googleusercontent.com.json');
        $client->setAccessType("offline");        // offline access
        $client->setIncludeGrantedScopes(true);   // incremental auth
        $client->addScope(
            array(
                'https://www.googleapis.com/auth/userinfo.email',
                'https://www.googleapis.com/auth/userinfo.profile',
                'https://www.googleapis.com/auth/plus.business.manage'
            )
        );

        $client->setRedirectUri('http://myserver.com/code');
        $client->setApprovalPrompt('force');

        $client->fetchAccessTokenWithAuthCode($code);
        $accessToken = $client->getAccessToken();

        return new Response(
            "<html><body>Authenticated with code : " . $code . "<br/>\n\n".
            " Access Token is : ". var_export($accessToken, true) . "</body></html>"
        );
  1. 访问令牌仍然为空。第$accessToken = $client->getAccessToken();行返回null或false。

这可以在完整的基于PHP的版本中使用,但是PHP版本基于创建用户需要遵循的链接,然后用户位于Google服务器上并且可以批准该应用程序,一旦批准,该用户将被重定向回该应用程序。然后,应用会收到验证码。

我只是想避免由于单页应用程序的架构或偏好而导致的重定向。我唯一想到的选择是打开一个弹出窗口,并在返回访问和刷新代码时通知原始窗口,以便PHP客户端可以继续查询API,但这是一个丑陋的解决方案,恕我直言。

是否还有另一种方法来获取可在PHP上但从JavaScript获取的授权代码?

0 个答案:

没有答案