Melakukan Autentikasi Menggunakan Microsoft dan C ++

Anda dapat mengizinkan pengguna untuk melakukan autentikasi dengan Firebase menggunakan penyedia OAuth, seperti Microsoft Azure Active Directory, dengan mengintegrasikan Login OAuth umum berbasis web ke aplikasi Anda menggunakan Firebase SDK agar alur login bisa dijalankan secara menyeluruh. Karena alur ini memerlukan penggunaan Firebase SDK berbasis ponsel, SDK ini hanya didukung di platform Android dan iOS.

Sebelum memulai

  1. Tambahkan Firebase ke project C++ Anda.
  2. Dalam file build.gradle level project, pastikan Anda memasukkan repositori Maven Google di bagian buildscript dan allprojects.
  3. Di Firebase console, buka bagian Auth.
  4. Pada tab Metode login, aktifkan penyedia Microsoft.
  5. Tambahkan Client ID dan Rahasia Klien dari konsol developer penyedia tersebut ke konfigurasi penyedia:
    1. Untuk mendaftarkan klien OAuth Microsoft, ikuti petunjuk di artikel Panduan Memulai: Mendaftarkan aplikasi dengan endpoint Azure Active Directory v2.0. Perlu diperhatikan bahwa endpoint ini mendukung login menggunakan akun pribadi Microsoft dan akun Azure Active Directory. Pelajari lebih lanjut Azure Active Directory v2.0.
    2. Saat mendaftarkan aplikasi dengan penyedia ini, pastikan untuk mendaftarkan domain *.firebaseapp.com untuk project Anda sebagai domain pengalihan untuk aplikasi Anda.
  6. Klik Simpan.

Mengakses class firebase::auth::Auth

Class Auth adalah gateway untuk semua panggilan API.
  1. Tambahkan file header Auth dan Aplikasi:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. Pada kode inisialisasi Anda, buat class firebase::App.
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. Dapatkan class firebase::auth::Auth untuk firebase::App Anda. Terdapat fungsi pemetaan one-to-one antara App dan Auth.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Memproses alur login dengan Firebase SDK

Untuk menangani alur login dengan Firebase SDK, ikuti langkah-langkah berikut:

  1. Buat instance FederatedOAuthProviderData yang dikonfigurasi dengan ID penyedia yang sesuai untuk Microsoft.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. Opsional: Tentukan parameter OAuth kustom tambahan yang ingin dikirim dengan permintaan OAuth.

    // Prompt user to re-authenticate to Microsoft.
    provider_data.custom_parameters["prompt"] = "login";
    
    // Target specific email with login hint.
    provider_data.custom_parameters["login_hint"] =
        "user@firstadd.onmicrosoft.com";
    

    Untuk mengetahui parameter yang didukung Microsoft, baca dokumentasi OAuth Microsoft. Perlu diperhatikan bahwa Anda tidak dapat meneruskan parameter yang diperlukan Firebase dengan setCustomParameters(). Beberapa parameter tersebut antara lain client_id, response_type, redirect_uri, state, scope, dan response_mode.

    Untuk hanya mengizinkan pengguna dari tenant Azure AD tertentu agar dapat login ke aplikasi, nama domain yang cocok bagi tenant Azure AD atau ID GUID tenant dapat digunakan. Hal ini dapat dilakukan dengan menentukan kolom "tenant" di objek parameter kustom.

    // Optional "tenant" parameter in case you are using an Azure AD tenant.
    // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com'
    // or "common" for tenant-independent tokens.
    // The default value is "common".
    provider_data.custom_parameters["tenant"] ="TENANT_ID";
    
  3. Opsional: Tentukan cakupan OAuth 2.0 tambahan di luar profil dasar yang ingin diminta dari penyedia autentikasi.

    provider_data.scopes.push_back("mail.read");
    provider_data.scopes.push_back("calendars.read");
    

    Untuk mempelajari lebih lanjut, baca dokumentasi izin dan persetujuan Microsoft.

  4. Setelah data penyedia Anda dikonfigurasi, gunakan data tersebut untuk membuat FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Lakukan autentikasi dengan Firebase menggunakan objek penyedia Auth. Perlu diperhatikan bahwa tidak seperti operasi FirebaseAuth lainnya, tindakan ini akan mengendalikan UI Anda dengan memunculkan tampilan web, tempat pengguna dapat memasukkan kredensial mereka.

    Untuk memulai alur login, panggil signInWithProvider:

    firebase::Future<firebase::auth::SignInResult> result =
      auth->SignInWithProvider(provider_data);
    

    Selanjutnya, aplikasi Anda dapat menunggu atau mendaftarkan callback pada Future.

    Dengan menggunakan token akses OAuth, Anda dapat memanggil Microsoft Graph API.

    Tidak seperti penyedia lain yang didukung oleh Firebase Auth, Microsoft tidak menyediakan URL foto. Sebagai gantinya, data biner untuk foto profil harus diminta melalui Microsoft Graph API.

  6. Meskipun contoh di atas berfokus pada alur login, Anda juga dapat menautkan penyedia Microsoft Azure Active Directory ke pengguna yang ada menggunakan LinkWithProvider. Misalnya, Anda dapat menautkan beberapa penyedia ke pengguna yang sama agar dapat login dengan salah satu penyedia tersebut.

    firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
    
  7. Pola yang sama dapat digunakan dengan ReauthenticateWithProvider, yang dapat digunakan untuk mengambil kredensial baru untuk operasi sensitif yang memerlukan login terbaru.

    firebase::Future<firebase::auth::SignInResult> result =
      user->ReauthenticateWithProvider(provider_data);
    

    Selanjutnya, aplikasi Anda dapat menunggu atau mendaftarkan callback pada Future.

Langkah berikutnya

Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan ditautkan ke kredensial, yaitu nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi, yang digunakan pengguna tersebut untuk login. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project, terlepas dari cara pengguna login.

  • Di aplikasi, Anda bisa mendapatkan informasi profil dasar pengguna dari objek firebase::auth::User:

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      std::string name = user->display_name();
      std::string email = user->email();
      std::string photo_url = user->photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user->uid();
    }
    
  • Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik yang login dari variabel auth, dan menggunakannya untuk mengontrol data yang dapat diakses oleh pengguna.

Anda dapat mengizinkan pengguna untuk login ke aplikasi menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.

Agar pengguna logout, panggil SignOut():

auth->SignOut();