在我的基于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身份验证登录的所有用户。
答案 0 :(得分:2)
将导致404
将导致
{
"error" : "invalid_request"
}
不知道为什么你的代码在去年你有额外/在那里工作