ユーザーが Google アカウントを選択すると、One Tap サインイン クライアントは Google ID トークンを取得します。ID トークンは、ユーザーの ID の署名付きアサーションです。ユーザーの基本的なプロフィール情報も含まれており、Google によって確認されたメールアドレスが含まれる場合もあります。
ID トークンが利用可能な場合、それを使用してアプリのバックエンドで安全に認証したり、ユーザーのメールアドレスを確認することなく、ユーザーを新しいアカウントに自動的に登録したりできます。
ID トークンを使用してユーザーをログインまたは登録するには、トークンをアプリのバックエンドに送信します。バックエンドで、Google API クライアント ライブラリまたは汎用 JWT ライブラリを使用してトークンを検証します。ユーザーがこの Google アカウントでアプリにログインしたことがない場合は、新しいアカウントを作成します。
リプレイ攻撃を回避するためにノンスを使用することを選択した場合は、getNonce を使用して、ID トークンとともにバックエンド サーバーに送信し、期待される値を確認します。ユーザーの安全性とセキュリティを向上させるために、nonce の使用を強く検討することをおすすめします。
認証情報オブジェクトから ID トークンを取得する
ユーザーの認証情報を取得したら、認証情報オブジェクトに ID トークンが含まれているかどうかを確認します。その場合は、バックエンドに送信します。
Java
public class YourActivity extends AppCompatActivity { // ... private static final int REQ_ONE_TAP = 2; // Can be any integer unique to the Activity. private boolean showOneTapUI = true; // ... @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQ_ONE_TAP: try { SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data); String idToken = credential.getGoogleIdToken(); if (idToken != null) { // Got an ID token from Google. Use it to authenticate // with your backend. Log.d(TAG, "Got ID token."); } } catch (ApiException e) { // ... } break; } } }
Kotlin
class YourActivity : AppCompatActivity() { // ... private val REQ_ONE_TAP = 2 // Can be any integer unique to the Activity private var showOneTapUI = true // ... override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) when (requestCode) { REQ_ONE_TAP -> { try { val credential = oneTapClient.getSignInCredentialFromIntent(data) val idToken = credential.googleIdToken when { idToken != null -> { // Got an ID token from Google. Use it to authenticate // with your backend. Log.d(TAG, "Got ID token.") } else -> { // Shouldn't happen. Log.d(TAG, "No ID token!") } } } catch (e: ApiException) { // ... } } } // ... }