使用Google oAuth2服务器端身份验证时出现400错误代码

时间:2016-12-11 20:52:18

标签: php curl google-api google-oauth google-api-php-client

在我的基于PHP的应用程序中,我使用Google oAuth 2服务器端流程已有好几年了,直到最近才一直运行良好。我一直在阅读任何可能破坏的API更改,但无法找到。大多数有类似问题的问题已有几年了,所以我提出了一个新问题。特别奇怪的是,这停止了我的工作而没有任何改变。

以下详细信息来自我的开发环境,但我在生产中获得了类似的结果。这是我用来获取权限的URL(不确定正确的术语是什么):

https://accounts.google.com/o/oauth2/auth?
scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&state=%2Fprofile
&redirect_uri=http%3A%2F%2Fwww.jungledragon.org%2Fapps%2Fjd4%2Fsignin%2Fgoogle%2Fcallback
&response_type=code
&client_id=652476484487.apps.googleusercontent.com
&approval_prompt=auto

这似乎工作正常。如果尚未给出,则用户确实会看到Google屏幕以授予访问权限。如果用户随后批准了收益,则会根据回调URL将其重定向回我的应用程序。

获得许可后,下一个目标是获取一些用户数据。为此,使用以下代码:

        // get values from the callback URL
        parse_str($_SERVER['QUERY_STRING'],$_GET);
        $code = $_GET['code'];
        $error = $_GET['error'];
        $state = $_GET['state'];

        // an error reason is returned, something went wrong
        if ($error_reason) { return false; }

        // our app is recognized, get access token by doing a post to the Google oAuth service
        $url = 'https://accounts.google.com//o/oauth2/token';
        $data = 
        "code=" . urlencode($code) . 
        "&client_id=" . $this->CI->config->item('pd_oauth_google_clientid') . 
        "&client_secret=" . $this->CI->config->item('pd_oauth_google_clientsecret') . 
        "&redirect_uri=" . urlencode($this->CI->config->item('pd_oauth_google_callbackurl')) . 
        "&grant_type=authorization_code";

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);

        // check the result. anything but a 200 return code is an error
        $info = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        if ($info!=200) { return false; }

如您所见,使用多个参数创建了CURL POST请求。这些参数值都没有改变,这已经有效多年,但现在已停止工作,原因不明。

特别的问题是帖子的回复是Google Error 404 (Not Found)!!页面。这并没有给我任何有关可能出错的有意义的信息。

非常感谢帮助,因为此问题会阻止我的生产网站上通过Google身份验证登录的所有用户。

1 个答案:

答案 0 :(得分:2)

  

https://accounts.google.com//o/oauth2/token

将导致404

  

https://accounts.google.com/o/oauth2/token

将导致

{
  "error" : "invalid_request"
}

不知道为什么你的代码在去年你有额外/在那里工作