Supabase Google Login - 一般設定
インストール手順と完全なマークダウンガイドを含むセットアップの質問をコピーしてください。
このガイドでは、Google Sign-InとSupabase Authenticationを統合するために、Capacitor Social Login プラグインを使用します。この設定では、モバイルプラットフォームでネイティブのGoogle Sign-Inを使用しながら、バックエンドの認証にSupabase Authを活用できます。
Prerequisites
Section titled “Prerequisites”開始する前に、以下を確認してください。
-
Google Login General Setup Google OAuthの設定方法についてのガイドを読みます ターゲットプラットフォームごとに、Google OAuthの設定方法についてのガイドを参照してください。
-
Android Setup
Supabase で Google OAuth プロバイダーを有効にする
「Supabase で Google OAuth プロバイダーを有効にする」-
あなたの Supabase ダッシュボード
-
あなたのプロジェクト
-
は、
Authenticationメニュー
-
Click on the
Providerstab
-
Find the
Googleprovider
-
Enable the provider
-
Add the client IDs for the platforms you plan to use
-
Click on the
Savebutton
Voilà, Supabase認証とGoogleサインインを有効にしました 🎉
GoogleサインインとSupabase認証ヘルパーのしくみ
GoogleサインインとSupabase認証ヘルパーのしくみこのセクションでは、SupabaseとGoogleサインインの統合の内部動作を説明します。 このフローを理解することで、認証プロセスの実装とトラブルシューティングを支援できます。
1. ノンス生成
1. ノンス生成実装は、Cloudflareのnonce要件に従って安全なnonceペアを生成します。 Supabase nonce要件:
// Generate URL-safe random noncefunction getUrlSafeNonce(): string { const array = new Uint8Array(32); crypto.getRandomValues(array); return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');}
// Hash the nonce with SHA-256async function sha256Hash(message: string): Promise<string> { const encoder = new TextEncoder(); const data = encoder.encode(message); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');}
// Generate nonce pairasync function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> { const rawNonce = getUrlSafeNonce(); const nonceDigest = await sha256Hash(rawNonce); return { rawNonce, nonceDigest };}フロー:
rawNonce: URL安全のランダム文字列 (64 桁の 16 進数)nonceDigest: SHA-256 ハッシュのrawNonce(16 進数エンコード)nonceDigestはGoogle Sign-Inに渡されます → GoogleはIDトークンにnonceダイジェストを含めますrawNonceはSupabaseに渡されます → Supabaseはraw nonceをハッシュし、トークンのnonceと比較します
2. Google Sign-In
セクション「2. Google Sign-In」関数はプラグインを初期化し、Googleでサインインします:
await SocialLogin.initialize({ google: { webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // iOS only: iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', mode: 'online', // Required to get idToken },});
const response = await SocialLogin.login({ provider: 'google', options: { scopes: ['email', 'profile'], nonce: nonceDigest, // Pass the SHA-256 hashed nonce },});3. JWT の検証
セクション “3. JWT の検証”Supabase へのトークンの送信前に、実装では JWT トークンを検証します:
function validateJWTToken(idToken: string, expectedNonceDigest: string): { valid: boolean; error?: string } { const decodedToken = decodeJWT(idToken);
// Check audience matches your Google Client IDs const audience = decodedToken.aud; if (!VALID_GOOGLE_CLIENT_IDS.includes(audience)) { return { valid: false, error: 'Invalid audience' }; }
// Check nonce matches const tokenNonce = decodedToken.nonce; if (tokenNonce && tokenNonce !== expectedNonceDigest) { return { valid: false, error: 'Nonce mismatch' }; }
return { valid: true };}なぜ Supabase への検証をする必要があるのか
JWT トークンを Supabase への送信前に検証することは、以下の重要な目的を果たします:
-
無効なリクエストの防止:トークンが不正な受信者または非一致の nonce を持っている場合、Supabase はトークンを拒否します。検証を先に進めることで、不必要な API 呼び出しを回避し、明確なエラーメッセージを提供できます。
-
トークンキャッシュの問題:iOS などのプラットフォーム (特に iOS ) では、Google Sign-In SDK がパフォーマンスのためにトークンをキャッシュすることがあります。キャッシュされたトークンが返される場合、キャッシュされたトークンは、異なる nonce (または nonce がない場合) で生成された可能性があり、nonce の一致エラーで Supabase から拒否される可能性があります。トークンを Supabase への送信前に検証することで、早期にこの問題を検出し、自動的に新しいトークンで再試行できます。
-
セキュリティ (iOS): iOSにおけるトークン検証は、Google Client IDごとにトークンが発行されたことを確認し、他のアプリケーション用に意図されたトークンを使用した場合の潜在的なセキュリティ問題を防止します。
-
より良いエラー処理: SupabaseがiOSのキャッシュ問題を透過的に自動リトライロジックで処理できるように、問題を検出することができます。
検証が失敗した場合、関数は自動的に:
- Googleからログアウト (キャッシュされたトークンをクリア - iOSでは重要)
- 再認証を1度行う (正しいnonceを使用して新しいトークンを生成)
- 再試行も失敗した場合、エラーを返す
4. Supabaseサインイン
「4. Supabaseサインイン」のセクション検証されたトークンは、最後にSupabaseに送信されます:
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});完全なCodeリファレンス
「Code」の完全なリファレンス実装の完全なバージョンは、 のファイルにあります。 supabaseAuthUtils.ts 、以下を含みます:
getUrlSafeNonce()- URL安全のランダムなnonceを生成するsha256Hash()- SHA-256で文字列をハッシュするgetNonce()- nonce pairを生成するdecodeJWT()- JWTトークンをデコードするvalidateJWTToken()- JWTの受信者とnonceを検証するauthenticateWithGoogleSupabase()- 自動リトライ機能付きの主な認証関数
追加の例ファイル
「追加の例ファイル」- SupabasePage.tsx - Webプラットフォームへのリダイレクトハンドリングの例
- SupabaseCreateAccountPage.tsx - アカウント作成ページの例
次のステップ
「次のステップ」セクション以下のプラットフォーム固有のセットアップガイドに進んでください。
__CAPGO_KEEP_0__
「__CAPGO_KEEP_0__」セクションIf you are using Supabase Google Login - General Setup を使用して Using @capgo/capacitor-social-login for the native capability in Using @capgo/capacitor-social-login, @capgo/capacitor-social-login for the implementation detail in @capgo/capacitor-social-login, @capgo/capacitor-passkey for the implementation detail in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric for the implementation detail in @capgo/capacitor-native-biometric, and Two-factor authentication __CAPGO_KEEP_0__の実装詳細については、2要素認証の詳細を参照してください。