Bermigrasi dari Google Identity Toolkit ke Firebase Authentication

Versi terbaru Google Identity Toolkit telah dirilis sebagai Firebase Authentication. Ke depannya, fitur pada Identity Toolkit akan dibekukan dan semua pengembangan fitur baru akan dilakukan pada Firebase Authentication. Kami mendorong developer Identity Toolkit untuk beralih ke Firebase Authentication segera setelah memungkinkan untuk aplikasi mereka. Namun, Identity Toolkit terus berfungsi dan tidak akan dihentikan tanpa pengumuman lebih lanjut.

Fitur Baru

Firebase Authentication memiliki beberapa peningkatan fitur signifikan dibandingkan Google Identity Toolkit:

  • Akses ke semua Firebase

    Firebase adalah platform seluler yang membantu Anda mengembangkan aplikasi berkualitas tinggi secara cepat, mengembangkan basis pengguna, dan menghasilkan lebih banyak uang. Firebase terdiri dari fitur pelengkap yang dapat Anda padu padankan sesuai kebutuhan dan mencakup infrastruktur untuk: analisis seluler, cloud messaging, realtime database, penyimpanan file, hosting statis, konfigurasi jarak jauh, pelaporan error seluler, dan pengujian Android.

  • UI yang diperbarui

    Kami telah sepenuhnya membangun kembali alur UI berdasarkan riset UX terbaru Google. Hal ini mencakup pemulihan sandi, penautan akun, alur disambiguasi akun baru/yang sudah ada yang sering kali membutuhkan waktu yang signifikan untuk menulis kode dan melakukan debug. Alat ini mengintegrasikan Smart Lock untuk Sandi di Android, yang secara signifikan meningkatkan konversi login dan pendaftaran untuk aplikasi yang berpartisipasi. Platform ini juga mendukung modifikasi tema yang mudah agar sesuai dengan aplikasi Anda dan, untuk kemampuan penyesuaian maksimum, versi Android dan iOS telah bersifat open source.

  • Penyiapan server yang disederhanakan

    Kami telah memudahkan developer menggunakan Firebase Authentication. Dengan Identity Toolkit, kami melihat banyak developer memilih untuk tidak menerapkan alur pemulihan email, sehingga pengguna tidak dapat memulihkan akun jika lupa sandinya. Firebase Authentication dapat mengirim verifikasi email, reset sandi, dan pesan sandi yang diubah kepada pengguna dan teksnya dapat disesuaikan dengan mudah untuk pengguna Anda. Selain itu, Anda tidak perlu lagi menghosting widget UI untuk menghosting pengalihan dan menyelesaikan operasi perubahan sandi.

  • Konsol admin baru

    Firebase memiliki konsol developer baru dan bagian Authentication memungkinkan Anda untuk melihat, mengubah, dan menghapus pengguna. Hal ini dapat sangat membantu dalam men-debug alur login dan pendaftaran Anda. Konsol juga memungkinkan Anda mengonfigurasi metode autentikasi dan menyesuaikan template email.

  • SDK baru

    Semua API server Identity Toolkit kini tersedia secara native dengan setiap library klien kami (Android, iOS, web). Developer akan dapat login dan mendaftarkan pengguna lama dan baru, mengakses properti pengguna, menautkan, memperbarui serta menghapus akun, mereset sandi, dan lainnya tanpa terikat ke UI yang tetap. Jika ingin, Anda dapat membangun seluruh alur dan pengalaman login Anda sendiri secara manual selain API ini.

  • Pengelolaan sesi untuk aplikasi seluler

    Dengan Identity Toolkit, aplikasi membuat status sesinya sendiri berdasarkan peristiwa autentikasi awal dari Identity Toolkit. Firebase Auth menggunakan layanan backend yang mengambil token refresh, yang dicetak dari peristiwa autentikasi, lalu menukarnya dengan token akses selama satu jam untuk Android, iOS, dan JavaScript. Saat pengguna mengubah sandinya, token refresh tidak akan lagi dapat menghasilkan token akses baru, sehingga akan menonaktifkan akses sampai pengguna melakukan autentikasi ulang pada perangkat tersebut.

  • Autentikasi anonim dan GitHub

    Firebase Authentication mendukung dua jenis autentikasi baru: GitHub dan anonim. Login anonim dapat digunakan untuk membuat ID pengguna unik tanpa mengharuskan pengguna melalui proses login atau pendaftaran apa pun. Dengan pengguna anonim, Anda kini dapat melakukan panggilan API yang diautentikasi, seperti saat Anda melakukan panggilan pada pengguna biasa. Saat pengguna memutuskan untuk mendaftar ke akun, semua aktivitas dipertahankan dengan ID pengguna yang sama. Ini sangat bagus untuk situasi seperti keranjang belanja sisi server atau aplikasi apa pun tempat Anda ingin berinteraksi dengan pengguna sebelum mengirimkannya melalui alur pendaftaran.

Perbedaan Fitur

Beberapa fitur Identity Toolkit saat ini tidak tersedia di Firebase Authentication, sementara fitur lainnya telah didesain ulang dan berfungsi secara berbeda. Anda mungkin memilih untuk tidak langsung bermigrasi jika fitur ini penting untuk aplikasi Anda. Dalam banyak kasus, fitur ini mungkin tidak penting untuk aplikasi Anda atau mungkin ada penggantian mudah yang akan memungkinkan Anda melanjutkan migrasi.

Perbedaan sisi server

Layanan Identity Toolkit inti dengan REST API yang mendasarinya, logika validasi akun, dan database pengguna utama hanya mengalami update kecil. Namun, beberapa fitur dan cara mengintegrasikan Firebase Authentication ke dalam layanan telah berubah.

  • Penyedia Identitas

    PayPal dan AOL tidak didukung. Pengguna yang memiliki akun dari IDP ini masih dapat login ke aplikasi Anda menggunakan alur pemulihan sandi dan menyiapkan sandi untuk akun mereka.

  • Library server

    Saat ini, ada Firebase admin SDK yang tersedia untuk Java, Node.js, Python, Go, dan C#.

  • Email pengelolaan akun

    Pesan reset sandi, verifikasi email, dan perubahan email dapat dilakukan oleh Firebase atau dari server email developer. Saat ini, template email Firebase hanya menawarkan penyesuaian terbatas.

  • Konfirmasi perubahan alamat email

    Di Identity Toolkit, saat pengguna memutuskan untuk mengubah alamat email, pengguna akan mengirim email ke alamat baru yang memiliki link untuk melanjutkan alur perubahan alamat email.

    Firebase mengonfirmasi perubahan alamat email dengan mengirimkan email pencabutan ke alamat email lama yang berisi link untuk mengembalikan perubahan.

  • Peluncuran IDP

    Identity Toolkit memiliki kemampuan untuk menambahkan penyedia identitas ke sistem login secara bertahap, sehingga Anda dapat bereksperimen dengan dampaknya terhadap permintaan dukungan. Fitur ini telah dihapus di Firebase Authentication.

Perbedaan sisi klien

Di Firebase, fitur yang disediakan oleh Google Identity Toolkit dibagi menjadi dua komponen:

  • Firebase Authentication SDK

    Dalam Firebase Authentication, fungsi yang disediakan oleh REST API Identity Toolkit telah dikemas dalam SDK klien yang tersedia untuk Android, iOS, dan JavaScript. Anda dapat menggunakan SDK untuk login dan mendaftarkan pengguna; mengakses informasi profil pengguna; menautkan, memperbarui, dan menghapus akun; serta mereset sandi menggunakan SDK klien, bukan berkomunikasi dengan layanan backend melalui panggilan REST.

  • Autentikasi FirebaseUI

    Semua alur UI yang mengelola login, pendaftaran, pemulihan sandi, dan penautan akun telah dibuat ulang menggunakan Frebase Authentication SDK. SDK ini tersedia sebagai SDK open source untuk iOS dan Android agar Anda dapat menyesuaikan alur sepenuhnya dengan cara yang tidak mungkin dilakukan dengan Identity Toolkit.

Perbedaan lainnya mencakup:

  • Sesi dan migrasi

    Karena sesi dikelola secara berbeda di Identity Toolkit dan Firebase Authentication, sesi pengguna yang ada akan dihentikan setelah mengupgrade SDK, dan pengguna harus login lagi.

Sebelum memulai

Sebelum dapat bermigrasi dari Identity Toolkit ke Firebase Authentication, Anda harus

  1. Buka Firebase console, klik Import Google Project, lalu pilih project Identity Toolkit Anda.

  2. Klik > Permissions untuk membuka halaman IAM & Admin.

  3. Buka Akun layanan. Di sini, Anda dapat melihat akun layanan yang sebelumnya Anda konfigurasi untuk Identity Toolkit.

  4. Di samping akun layanan, klik > Create key. Kemudian, dalam dialog Create private key, tetapkan Jenis kunci ke JSON, lalu klik Create. File JSON yang berisi kredensial akun layanan Anda telah didownload untuk Anda. Anda memerlukan ID ini untuk melakukan inisialisasi SDK di langkah berikutnya.

  5. Kembali ke Firebase console. Di bagian Auth, buka halaman Email Templates. Di halaman ini, sesuaikan template email aplikasi Anda.

    Di Identity Toolkit, saat pengguna mereset sandi, mengubah alamat email, dan memverifikasi email alamat email mereka, Anda harus mendapatkan kode OOB dari server Identity Toolkit, lalu mengirim kode tersebut kepada pengguna melalui email. Firebase mengirimkan email berdasarkan template yang Anda konfigurasi tanpa memerlukan tindakan tambahan.

  6. Opsional: Jika Anda perlu mengakses layanan Firebase di server, instal Firebase SDK.

    1. Anda dapat menginstal modul Firebase Node.js dengan npm:

      $ npm init
      $ npm install --save firebase-admin
      
    2. Dalam kode, Anda dapat mengakses Firebase menggunakan:

      var admin = require('firebase-admin');
      var app = admin.initializeApp({
        credential: admin.credential.cert('path/to/serviceAccountCredentials.json')
      });
      

Selanjutnya, selesaikan langkah-langkah migrasi untuk platform aplikasi Anda: Android, iOS, web.

Server dan JavaScript

Perubahan penting

Ada sejumlah perbedaan tambahan dalam implementasi web Firebase dari Identity Toolkit.

  • Pengelolaan sesi web

    Sebelumnya, saat pengguna diautentikasi menggunakan widget Toolkit Identitas, cookie akan ditetapkan untuk pengguna yang digunakan untuk mem-bootstrap sesi. Cookie ini memiliki masa aktif dua minggu dan digunakan untuk memungkinkan pengguna menggunakan widget pengelolaan akun guna mengubah sandi dan alamat email. Beberapa situs menggunakan cookie ini untuk mengautentikasi semua permintaan halaman lainnya di situs tersebut. Situs lain menggunakan cookie untuk membuat cookie sendiri melalui sistem pengelolaan cookie framework mereka.

    SDK klien Firebase kini mengelola token ID Firebase dan berfungsi dengan backend Firebase Authentication untuk memastikan sesi selalu terbaru. Backend mengakhiri sesi saat terjadi perubahan akun penting (seperti perubahan sandi pengguna). Token ID Firebase tidak otomatis ditetapkan sebagai cookie di klien web dan hanya memiliki masa aktif satu jam. Kecuali jika Anda hanya ingin sesi berdurasi satu jam, token ID Firebase tidak sesuai untuk digunakan sebagai cookie untuk memvalidasi semua permintaan halaman Anda. Sebagai gantinya, Anda harus menyiapkan pemroses saat pengguna login, mendapatkan token ID Firebase, memvalidasi token, dan membuat cookie sendiri melalui sistem pengelolaan cookie framework Anda.

    Anda harus menetapkan masa aktif sesi cookie berdasarkan kebutuhan keamanan aplikasi Anda.

  • Alur login web

    Sebelumnya, pengguna dialihkan ke accountchooser.com saat login dimulai untuk mempelajari ID yang ingin digunakan pengguna. Alur UI Firebase Auth kini dimulai dengan daftar metode login, termasuk opsi email yang mengarah ke accountchooser.com untuk web dan menggunakan hintRequest API di Android. Selain itu, alamat email tidak lagi diperlukan di UI Firebase. Hal ini akan mempermudah dukungan bagi pengguna anonim, pengguna autentikasi kustom, atau pengguna dari penyedia yang tidak memerlukan alamat email.

  • Widget pengelolaan akun

    Widget ini menyediakan UI bagi pengguna untuk mengubah alamat email, mengubah sandi, atau membatalkan tautan akun mereka dari penyedia identitas. Saat ini, proses pembuatan tersebut sedang dalam pengembangan.

  • Tombol/widget login

    Widget seperti tombol login dan kartu pengguna tidak lagi tersedia. Keduanya dapat dibuat dengan sangat mudah menggunakan Firebase Authentication API.

  • Tidak ada signOutUrl

    Anda harus memanggil firebase.auth.signOut() dan menangani callback.

  • Tidak ada oobActionUrl

    Pengiriman email sekarang ditangani oleh Firebase dan dikonfigurasi di Firebase console.

  • Penyesuaian CSS

    FirebaseUI menggunakan gaya visual Material Design Lite, yang menambahkan animasi Desain Material secara dinamis.

Langkah 1: Ubah Kode Server

  1. Jika server Anda mengandalkan token Identity Toolkit (berlaku selama dua minggu) untuk mengelola sesi pengguna web, Anda harus mengonversi server untuk menggunakan cookie sesinya sendiri.

    1. Terapkan endpoint untuk memvalidasi token ID Firebase dan menetapkan cookie sesi bagi pengguna. Aplikasi klien mengirimkan token ID Firebase ke endpoint ini.
    2. Jika permintaan masuk berisi cookie sesi Anda sendiri, Anda dapat menganggap pengguna tersebut telah diautentikasi. Jika tidak, memperlakukan permintaan sebagai tidak diautentikasi.
    3. Jika Anda tidak ingin salah satu pengguna kehilangan sesi login yang sudah ada, sebaiknya tunggu selama dua minggu hingga semua token Identity Toolkit berakhir, atau lakukan juga validasi token ganda untuk aplikasi web seperti yang dijelaskan di bawah pada langkah 3.
  2. Selanjutnya, karena token Firebase berbeda dengan token Identity Toolkit, Anda harus memperbarui logika validasi token. Instal Firebase Server SDK ke server Anda; atau, jika Anda menggunakan bahasa yang tidak didukung oleh Firebase Server SDK, download library validasi token JWT untuk lingkungan Anda dan validasi token dengan benar.

  3. Saat pertama kali melakukan pembaruan di atas, Anda mungkin masih memiliki jalur kode yang bergantung pada token Identity Toolkit. Jika Anda memiliki aplikasi iOS atau Android, pengguna harus mengupgrade ke versi baru aplikasi agar jalur kode baru dapat berfungsi. Jika tidak ingin memaksa pengguna untuk mengupdate aplikasi, Anda dapat menambahkan logika validasi server tambahan yang memeriksa token dan menentukan apakah token perlu menggunakan Firebase SDK atau Identity Toolkit SDK untuk memvalidasi token. Jika Anda hanya memiliki aplikasi web, semua permintaan autentikasi baru akan dialihkan ke Firebase, sehingga Anda hanya perlu menggunakan metode verifikasi token Firebase.

Lihat Referensi Firebase Web API.

Langkah 2: Perbarui HTML Anda

  1. Tambahkan kode inisialisasi Firebase ke aplikasi Anda:

    1. Buka project Anda di Firebase console.
    2. Di halaman Overview, klik Add App, lalu klik Add Firebase to your web app. Cuplikan kode yang menginisialisasi Firebase akan ditampilkan.
    3. Salin dan tempel cuplikan inisialisasi ke halaman web Anda.
  2. Tambahkan FirebaseUI Auth ke aplikasi Anda:

    <script src="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.js"></script>
    <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.css" />
    <!-- *******************************************************************************************
       * TODO(DEVELOPER): Paste the initialization snippet from:
       * Firebase Console > Overview > Add Firebase to your web app. *
       ***************************************************************************************** -->
    <script type="text/javascript">
      // FirebaseUI config.
      var uiConfig = {
        'signInSuccessUrl': '<url-to-redirect-to-on-success>',
        'signInOptions': [
          // Leave the lines as is for the providers you want to offer your users.
          firebase.auth.GoogleAuthProvider.PROVIDER_ID,
          firebase.auth.FacebookAuthProvider.PROVIDER_ID,
          firebase.auth.TwitterAuthProvider.PROVIDER_ID,
          firebase.auth.GithubAuthProvider.PROVIDER_ID,
          firebase.auth.EmailAuthProvider.PROVIDER_ID
        ],
        // Terms of service url.
        'tosUrl': '<your-tos-url>',
      };
    
      // Initialize the FirebaseUI Widget using Firebase.
      var ui = new firebaseui.auth.AuthUI(firebase.auth());
      // The start method will wait until the DOM is loaded.
      ui.start('#firebaseui-auth-container', uiConfig);
    </script>
    
  3. Hapus Identity Toolkit SDK dari aplikasi Anda.

  4. Jika Anda mengandalkan token ID Identity Toolkit untuk pengelolaan sesi, Anda harus melakukan perubahan berikut di sisi klien:

    1. Setelah berhasil login dengan Firebase, dapatkan token ID Firebase dengan memanggil firebase.auth().currentUser.getToken().

    2. Kirim token ID Firebase ke server backend, validasi, dan terbitkan cookie sesi Anda sendiri.

      Jangan hanya mengandalkan cookie sesi saat melakukan operasi yang sensitif atau mengirim permintaan edit yang diautentikasi ke server Anda. Anda harus memberikan perlindungan pemalsuan permintaan lintas situs (CSRF) tambahan.

      Jika framework Anda tidak memberikan perlindungan CSRF, salah satu cara untuk mencegah serangan adalah dengan mendapatkan token ID Firebase untuk pengguna yang login dengan getToken() dan menyertakan token tersebut bersama setiap permintaan (cookie sesi juga akan dikirim secara default). Selanjutnya, Anda akan memvalidasi token tersebut menggunakan SDK server Firebase selain pemeriksaan cookie sesi, yang diselesaikan oleh framework backend Anda. Ini akan mempersulit serangan CSF, karena token ID Firebase hanya disimpan menggunakan penyimpanan web, bukan dalam cookie.

    3. Token Identity Toolkit berlaku selama dua minggu. Anda mungkin ingin terus menerbitkan token yang bertahan selama dua minggu, atau Anda mungkin ingin memperpanjang token tersebut berdasarkan persyaratan keamanan aplikasi Anda. Saat pengguna logout, hapus cookie sesi.

Langkah 3: Perbarui URL alihan IDP

  1. Di Firebase console, buka bagian Authentication, lalu klik tab Sign-in Method.

  2. Untuk setiap penyedia login gabungan yang Anda dukung, lakukan hal berikut:

    1. Klik nama penyedia login.
    2. Salin URI pengalihan OAuth.
    3. Di konsol developer penyedia login, perbarui URI pengalihan OAuth.

Android

Langkah 1: Menambahkan Firebase ke aplikasi

  1. Buka Firebase console, lalu pilih project Identity Toolkit yang telah Anda impor.

  2. Di halaman Overview, klik Add App, lalu klik Add Firebase to your Android app. Di dialog Add Firebase, masukkan nama paket dan penandatanganan sertifikat sidik jari, lalu klik Add App. File konfigurasi google-services.json akan didownload ke komputer Anda.

  3. Salin file konfigurasi ke direktori root modul aplikasi Android Anda. File konfigurasi ini berisi informasi klien OAuth Google dan project.

  4. Di file build.gradle level Project (<var>your-project</var>/build.gradle), tentukan nama paket aplikasi Anda di bagian defaultConfig:

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. Selain itu, di file build.gradle level Project, tambahkan dependensi untuk menyertakan plugin google-services:

    buildscript {
     dependencies {
       // Add this line
       classpath 'com.google.gms:google-services:3.0.0'
     }
    }
    
  6. Di file build.gradle tingkat aplikasi (<var>my-project</var>/<var>app-module</var>/build.gradle), tambahkan baris berikut ke bagian bawah untuk mengaktifkan plugin google-services:

    // Add to the bottom of the file
    apply plugin: 'com.google.gms.google-services'
    

    Plugin google-services menggunakan file google-services.json untuk mengonfigurasi aplikasi Anda agar menggunakan Firebase.

  7. Selain itu, di file build.gradle tingkat aplikasi, tambahkan dependensi Firebase Authentication:

    compile 'com.google.firebase:firebase-auth:23.0.0'
    compile 'com.google.android.gms:play-services-auth:21.2.0'
    

Langkah 2: Hapus Identity Toolkit SDK

  1. Hapus konfigurasi Identity Toolkit dari file AndroidManifest.xml. Informasi ini disertakan dalam file google-service.json dan dimuat oleh plugin google-services.
  2. Hapus Identity Toolkit SDK dari aplikasi Anda.

Langkah 3: Menambahkan FirebaseUI ke aplikasi

  1. Tambahkan FirebaseUI Auth ke aplikasi Anda.

  2. Di aplikasi Anda, ganti panggilan ke Identity Toolkit SDK dengan panggilan ke FirebaseUI.

iOS

Langkah 1: Menambahkan Firebase ke aplikasi

  1. Tambahkan Firebase SDK ke aplikasi Anda dengan menjalankan perintah berikut:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Buka Firebase console, lalu pilih project Identity Toolkit yang telah Anda impor.

  3. Di halaman Overview, klik Add App, lalu klik Add Firebase to your iOS app. Di dialog Add Firebase, masukkan ID paket dan ID App Store aplikasi Anda, lalu klik Add App. File konfigurasi GoogleService-Info.plist akan didownload ke komputer Anda. Jika Anda memiliki beberapa ID paket dalam project, setiap ID paket harus terhubung di Firebase console agar dapat memiliki file GoogleService-Info.plist sendiri.

  4. Salin file konfigurasi ke root project Xcode Anda dan tambahkan ke semua target.

Langkah 2: Hapus Identity Toolkit SDK

  1. Hapus GoogleIdentityToolkit dari Podfile aplikasi Anda.
  2. Jalankan perintah pod install.

Langkah 3: Menambahkan FirebaseUI ke aplikasi

  1. Tambahkan FirebaseUI Auth ke aplikasi Anda.

  2. Di aplikasi Anda, ganti panggilan ke Identity Toolkit SDK dengan panggilan ke FirebaseUI.