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 クライアントによって取得されたトークン ID を使用してサーバーを承認しているためです。

古いバージョンの 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 に答える