Lompat ke konten

Pengaturan Umum Supabase Google Login

GitHub

Panduan ini akan memandu Anda untuk mengintegrasikan Sign-In Google dengan Supabase Authentication menggunakan plugin Login Sosial Capacitor.

Sebelum memulai, pastikan Anda memiliki:

  1. Buatlah proyek Supabase

  2. Baca panduan Pengaturan Login Google Umum panduan untuk mengatur kredit OAuth Google

  3. Ikuti panduan spesifik platform masing-masing untuk mengatur kredit OAuth Google untuk platform target Anda:

Mengaktifkan penyedia OAuth Google di Supabase

Judul bagian “Mengaktifkan penyedia OAuth Google di Supabase”
  1. Pergi ke halaman Dashboard Supabase

  2. Klik pada proyek Anda

    Pilih Proyek Supabase
  3. Perlu pergi ke Authentication menu

    Menu Autentikasi Supabase
  4. Klik pada Providers tab

    Tab Penyedia Supabase
  5. Temukan Google pengembang

    Supabase Google Pengembang
  6. Aktifkan pengembang

    Supabase Google Pengembang Aktifkan
  7. Tambahkan ID klien untuk platform yang Anda rencanakan untuk digunakan

    Supabase Google Pengembang Tambahkan ID Klien
  8. Klik pada Save tombol

    Supabase Provider Google Simpan

Voilà, Anda telah mengaktifkan Sign-In Google dengan Supabase Authentication 🎉

Bagaimana Helper Sign-In Google dengan Supabase Authentication Bekerja

Bagaimana Helper Sign-In Google dengan Supabase Authentication Bekerja

Bagian ini menjelaskan bagaimana integrasi Google Sign-In dengan Supabase bekerja di balik layar. Memahami aliran ini akan membantu Anda mengimplementasikan dan menyelesaikan masalah autentikasi.

Implementasi menghasilkan pasangan nonce yang aman sesuai dengan kebutuhan nonce Supabase:

// Generate URL-safe random nonce
function 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-256
async 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 pair
async function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> {
const rawNonce = getUrlSafeNonce();
const nonceDigest = await sha256Hash(rawNonce);
return { rawNonce, nonceDigest };
}

Alur:

  • rawNonceString acak aman URL (64 karakter hex)
  • nonceDigest: Hash SHA-256 dari rawNonce (dihapus dalam bentuk hex)
  • nonceDigest diarahkan ke Google Sign-In → Google mencantumkan digest nonce dalam token ID
  • rawNonce diarahkan ke Supabase → Supabase menghash nonce mentah dan membandingkannya dengan nonce token

2. Google Sign-In

Bab 2. Google Sign-In

Fungsi ini menginisialisasi plugin dan masuk dengan 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. Validasi JWT

Bab 3. Validasi JWT

Sebelum mengirimkan token ke Supabase, implementasi memvalidasi token 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 };
}

Mengapa memvalidasi sebelum Supabase?

Memvalidasi token JWT sebelum mengirimkan token ke Supabase memiliki beberapa tujuan penting:

  1. Mencegah Permintaan Tidak Valid: Jika token memiliki audiens atau nonce yang salah, Supabase akan menolak token tersebut. Memvalidasi terlebih dahulu menghindari panggilan API yang tidak perlu dan memberikan pesan kesalahan yang lebih jelas.

  2. Masalah Cache Token: Pada beberapa platform (terutama iOS), Google Sign-In SDK dapat menyimpan token untuk meningkatkan kinerja. Ketika token yang disimpan dikembalikan, token yang disimpan mungkin telah dibuat dengan nonce yang berbeda (atau tidak ada nonce sama sekali), sehingga Supabase menolak token tersebut dengan pesan kesalahan "nonce mismatch". Dengan memvalidasi sebelum mengirimkan ke Supabase, kita dapat mendeteksi masalah ini lebih awal dan secara otomatis mengulangi dengan token yang segar.

  3. Keamanan (iOS): Pada iOS, validasi memastikan token dikeluarkan untuk ID Klien Google yang spesifik, sehingga mencegah potensi masalah keamanan dari menggunakan token yang dimaksudkan untuk aplikasi lain.

  4. Pengelolaan Kesalahan yang Lebih Baik: Mendeteksi masalah sebelum Supabase memungkinkan logika ulang panggilan otomatis, yang sangat penting untuk mengelola masalah caching iOS secara transparan.

Jika validasi gagal, fungsi secara otomatis:

  1. Keluar dari Google (menghapus token yang disimpan - sangat penting pada iOS)
  2. Mencoba autentikasi sekali lagi (memaksa generasi token yang baru dengan nonce yang benar)
  3. Jika mencoba juga gagal, kembali error

Akhirnya, token yang telah diverifikasi dikirimkan ke Supabase:

const { data, error } = await supabase.auth.signInWithIdToken({
provider: 'google',
token: googleResponse.idToken,
nonce: rawNonce, // Pass the raw (unhashed) nonce
});

Implementasi yang lengkap tersedia di aplikasi contoh’s supabaseAuthUtils.ts file, yang termasuk:

  • getUrlSafeNonce() - Membuat Nonce Acak yang Aman untuk URL
  • sha256Hash() - Menghash String dengan SHA-256
  • getNonce() - Membuat Pasang Nonce
  • decodeJWT() - Membaca Token JWT
  • validateJWTToken() - Mengvalidasi Audience dan Nonce JWT
  • authenticateWithGoogleSupabase() - Fungsi Autentikasi Utama dengan Ulangan Otomatis

Silakan melanjutkan ke panduan pengaturan platform yang spesifik untuk platform target Anda:

Lanjutkan dari Supabase Google Login - Pengaturan Umum

Judul Bagian “Lanjutkan dari Supabase Google Login - Pengaturan Umum”

Jika Anda menggunakan Supabase Google Login - Pengaturan Umum untuk merencanakan autentikasi dan alur akun, hubungkannya dengan Menggunakan @capgo/capacitor-login-sosial untuk kemampuan asli di Menggunakan @capgo/capacitor-login-sosial, @capgo/capacitor-login-sosial untuk detail implementasi di @capgo/capacitor-login-sosial, @capgo/capacitor-passkey untuk detail implementasi di @capgo/capacitor-passkey, @capgo/capacitor-biometrik-asli untuk detail implementasi di @capgo/capacitor-biometrik-asli, dan Autentikasi dua faktor untuk detail implementasi di Autentikasi dua faktor.