私はバックエンドサーバでAndroidサインインを使用するためにthese instructionsに従っています。google/apiclient:署名検証に失敗しました
Androidのサインイン作品、と私は私のサーバーのクライアントIDとIDトークンを取得しています:
// Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.build();
// Build a GoogleApiClient with access to the Google Sign-In API and the
// options specified by gso.
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mGoogleSignIn.setSize(SignInButton.SIZE_STANDARD);
mGoogleSignIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, REQUEST_CODE_SIGN_IN);
}
});
このトークンは、POSTリクエストとしての私のバックエンドサーバに送信され
(コード関係ありません:それは作品)。
そしてサーバ(symfonyのバックエンドは)ユーザーIDを検証し、バックエンドデータベース内のユーザ情報を取得するために、再度ユーザを認証するためにgoogle/apiclient
を使用:
// Get token from user
$id_token = $request->get('id_token');
// Validate token
try {
$options = [
'client_id' => $this->container->getParameter('google_app_id')
];
$client = new \Google_Client($options);
$payload = $client->verifyIdToken($id_token);
if ($payload) {
$user = $this->getDoctrine()
->getRepository(User::class)
->findOneBy(['googleId' => $payload['sub']]);
if ($user != null) {
$data = [
'client_id' => $user->getClient()->getClientId(),
'client_secret' => $user->getClient()->getSecret(),
];
} else {
$data = [
'error' => 'Unknown user',
'message' => 'Please create an account first',
];
}
} else {
$data = [
'error' => 'Invalid token',
];
}
} catch (\Exception $e) {
$data = [
'error' => 'Invalid token',
'details' => $e->getMessage(),
];
}
例外が発生され、メッセージSignature Verification Failed
です。
オンラインでの調査の結果、このメッセージの理由が見つかりませんでした。これを引き起こしているのは何ですか?バックエンドで同じコードを使用していましたが、Android側でいくつか変更しましたが、Google Sign Inとは関係ありません。
OpenSSLのアップデートやタイムゾーンが設定されているかどうかの確認など、いくつかのことを行うことができます。 – Vamsi
私はほとんど情報を与えていません。 OpenSSLと日付は正しいですが、それは非常に良いアイデアでした。 –