ユーザーが Google アカウントを選択すると、One Tap サインイン クライアントは Google ID トークンを取得します。ID トークンは、ユーザーの ID の署名付きアサーションであり、ユーザーの基本的なプロフィール情報(Google によって確認済みのメールアドレスなど)も含まれています。
ID トークンを使用できる場合は、アプリのバックエンドで安全に認証したり、ユーザーのメールアドレスを確認することなくユーザーを自動的に新規アカウントに登録したりできます。
ID トークンを使用してユーザーをログインまたは登録するには、トークンをアプリのバックエンドに送信します。バックエンドで、Google API クライアント ライブラリまたは汎用 JWT ライブラリを使用してトークンを検証します。ユーザーがこの Google アカウントでアプリにログインしたことがない場合は、新しいアカウントを作成します。
リプレイ攻撃を回避するためにノンスを使用する場合は、getNonce を使用して ID トークンと共にバックエンド サーバーに送信し、想定される値を確認します。ユーザーの安全性とセキュリティを強化するために、ノンスの使用を強くおすすめします。
認証情報オブジェクトから 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) { // ... } } } // ... }