获取OAuth2访问令牌时出错 - invalid_grant。但它是有效的

时间:2015-11-27 23:12:52

标签: ios oauth-2.0 token google-client

尝试使用带有后端服务器的iOS在iOS上进行身份验证,该代码用于处理较旧的Google客户端库。

$client = new Google_Client();
$oauth2 = new Google_Service_Oauth2($client);
$client->setApplicationName('MyApp');
$client->setClientId($google_config["clientId"]);
$client->setClientSecret($google_config["clientSecret"]);
$client->setRedirectUri("");
$client->setDeveloperKey($google_config["developerKey"]));
Log::error("Google/authcode", $request->get('token'));
if (! isset($_SESSION['access_token'])) {
    try {
    $client->authenticate($request->get('token'));
    } .... THROWS exception: Error fetching OAuth2 access token, message: 'invalid_grant:

尝试验证令牌:

https://www.googleapis.com/oauth2/v1/tokeninfo?id_token= https://www.googleapis.com/oauth2/v2/tokeninfo?id_token= https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=

所有工作成功显示令牌有效。

修改 在添加verifyIdToken调用后,JUST FOUND OUT: 无效的发卡行,https://accounts.google.com!= accounts.google.com 似乎这就是我失败的原因。我猜测iOS sdk与PHP的设置方式有所不同?或者这可能不相关,并且假设它不是iOS设备的服务器授权。因为如果我不断改变服务器端代码,即将OAUTH2_ISSUER变为https://accounts.google.com,我会收到错误的收件人错误,这是有道理的,因为我使用iOS客户端获取的tokenid来授权服务器。

旧版iOS应用程序也可以正常运行。但令牌完全不同,虽然验证也很好。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我想我误解了文档。为了授权服务器,需要从

传递googleUser.serverAuthCode
- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)googleUser
 withError:(NSError *)error { ....

如果仅在iOS端用户googleUser.authentication.accessToken验证后端服务器googleUser.authentication.accessToken,则需要在服务器上验证或解析该服务器以获取电子邮件和其他数据。