0

尝试在带有后端服务器的 iOS 上使用 Google 进行身份验证,代码用于与旧的 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 调用后才发现: 无效的发行者,https ://accounts.google.com != accounts.google.com似乎这就是我失败的原因。我猜 iOS sdk 与 PHP 的设置不同?或者这可能不相关,并假设它不是来自 iOS 设备的服务器授权。因为如果我不断更改服务器端代码的内容,即将 OAUTH2_ISSUER 更改为https://accounts.google.com,我会收到错误的收件人错误,这是有道理的,因为我使用的是 iOS 客户端获取的 tokenid 来授权服务器。

旧版本的 iOS 应用程序也可以正常工作。但是令牌完全不同,尽管验证也很好。任何帮助是极大的赞赏。

4

1 回答 1

0

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

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

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

于 2015-11-28T20:00:34.233 回答