Melakukan Autentikasi Menggunakan Microsoft dan C ++
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Anda dapat mengizinkan pengguna 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 untuk menjalankan alur login end to end.
Alur ini memerlukan penggunaan Firebase SDK berbasis ponsel, sehingga hanya didukung di platform Android dan Apple.
Sebelum memulai
- Tambahkan Firebase ke project C++ Anda.
- Di Firebase console, buka bagian Auth.
- Pada tab Sign-in method, aktifkan penyedia Microsoft.
- Tambahkan Client ID dan Client Secret dari konsol developer penyedia tersebut ke konfigurasi penyedia:
- Untuk mendaftarkan klien OAuth Microsoft, ikuti petunjuk di Quickstart: Register an app with the Azure Active Directory v2.0 endpoint.
Perlu diperhatikan bahwa endpoint ini mendukung login menggunakan akun pribadi Microsoft dan akun
Azure Active Directory.
Pelajari lebih lanjut
Azure Active Directory v2.0.
- Saat mendaftarkan aplikasi ke penyedia ini, pastikan untuk mendaftarkan domain
*.firebaseapp.com
untuk project Anda sebagai domain pengalihan untuk
aplikasi Anda.
- Klik Save.
Mengakses class firebase::auth::Auth
Class
Auth
adalah gateway untuk semua panggilan API.
- Tambahkan file header Auth dan App:
#include "firebase/app.h"
#include "firebase/auth.h"
- 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__)
- 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);
Menangani alur login dengan Firebase SDK
Untuk menangani alur login dengan Firebase SDK, ikuti langkah-langkah berikut:
Buat instance FederatedOAuthProviderData
yang dikonfigurasi dengan ID penyedia yang sesuai untuk Microsoft.
firebase::auth::FederatedOAuthProviderData
provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
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 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 mengizinkan hanya pengguna dari tenant Azure AD tertentu login ke aplikasi, nama domain sederhana 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";
Opsional: Tentukan cakupan OAuth 2.0 tambahan selain 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.
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);
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::AuthResult> result =
auth->SignInWithProvider(provider_data);
Selanjutnya, aplikasi Anda dapat menunggu atau mendaftarkan callback pada Future.
Dengan 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.
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::AuthResult> result = user.LinkWithProvider(provider_data);
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::AuthResult> result =
user.ReauthenticateWithProvider(provider_data);
Selanjutnya, aplikasi Anda dapat menunggu atau mendaftarkan callback pada Future.
Lanjutan: Menangani alur login secara manual
Tidak seperti penyedia OAuth lain yang didukung oleh Firebase, seperti Google, Facebook, dan Twitter, yang proses loginnya dapat langsung dilakukan dengan kredensial berbasis token akses OAuth, Firebase Auth tidak mendukung kemampuan yang sama untuk penyedia seperti Microsoft karena server Firebase Auth tidak dapat memverifikasi audience token akses OAuth Microsoft.
Ini adalah persyaratan keamanan yang penting karena dapat membuat situs dan aplikasi rentan terkena serangan replay, yaitu ketika token akses OAuth Microsoft yang diperoleh untuk satu project (penyerang) dapat digunakan untuk login ke project lain (korban).
Sebagai gantinya, Firebase Auth menyediakan kemampuan untuk menangani seluruh alur OAuth dan pertukaran kode otorisasi menggunakan client ID dan secret klien OAuth yang dikonfigurasi dalam Firebase Console. Karena kode otorisasi hanya dapat digunakan bersama dengan client ID atau secret klien tertentu, kode otorisasi yang diperoleh untuk satu project tidak dapat digunakan dengan project lain.
Jika penyedia ini harus digunakan di lingkungan yang tidak didukung, library OAuth pihak ketiga dan autentikasi kustom Firebase perlu digunakan. Library OAuth pihak ketiga diperlukan untuk mengautentikasi penyedia, sedangkan autentikasi kustom Firebase diperlukan untuk menukar kredensial penyedia dengan token kustom.
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.is_valid()) {
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 milik pengguna 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.
Untuk memproses logout pengguna, panggil SignOut()
:
auth->SignOut();
Kecuali dinyatakan lain, konten di halaman ini dilisensikan berdasarkan Lisensi Creative Commons Attribution 4.0, sedangkan contoh kode dilisensikan berdasarkan Lisensi Apache 2.0. Untuk mengetahui informasi selengkapnya, lihat Kebijakan Situs Google Developers. Java adalah merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-08-16 UTC.
[null,null,["Terakhir diperbarui pada 2025-08-16 UTC."],[],[],null,["# Authenticate Using Microsoft and C++\n\nYou can let your users authenticate with Firebase using OAuth providers like\nMicrosoft Azure Active Directory by integrating web-based generic OAuth Login\ninto your app using the Firebase SDK to carry out the end to end sign-in flow.\nSince this flow requires the use of the phone-based Firebase SDKs, it is only\nsupported on Android and Apple platforms.\n\nBefore you begin\n----------------\n\n1. [Add Firebase to your C++ project](/docs/cpp/setup#note_select_platform).\n2. In the [Firebase console](//console.firebase.google.com/), open the **Auth** section.\n3. On the **Sign in method** tab, enable the **Microsoft** provider.\n4. Add the **Client ID** and **Client Secret** from that provider's developer console to the provider configuration:\n 1. To register a Microsoft OAuth client, follow the instructions in [Quickstart: Register an app with the Azure Active Directory v2.0 endpoint](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-register-an-app). Note that this endpoint supports sign-in using Microsoft personal accounts as well as Azure Active Directory accounts. [Learn more](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-overview) about Azure Active Directory v2.0.\n 2. When registering apps with these providers, be sure to register the `*.firebaseapp.com` domain for your project as the redirect domain for your app.\n5. Click **Save**.\n\nAccess the `firebase::auth::Auth` class\n---------------------------------------\n\nThe `Auth` class is the gateway for all API calls.\n\n1. Add the Auth and App header files: \n\n ```c++\n #include \"firebase/app.h\"\n #include \"firebase/auth.h\"\n ```\n2. In your initialization code, create a [`firebase::App`](/docs/reference/cpp/class/firebase/app) class. \n\n ```c++\n #if defined(__ANDROID__)\n firebase::App* app =\n firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);\n #else\n firebase::App* app = firebase::App::Create(firebase::AppOptions());\n #endif // defined(__ANDROID__)\n ```\n3. Acquire the `firebase::auth::Auth` class for your `firebase::App`. There is a one-to-one mapping between `App` and `Auth`. \n\n ```c++\n firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);\n ```\n\nHandle the sign-in flow with the Firebase SDK\n---------------------------------------------\n\nTo handle the sign-in flow with the Firebase SDK, follow these steps:\n\n1. Construct an instance of a `FederatedOAuthProviderData` configured with\n the provider id appropriate for Microsoft.\n\n firebase::auth::FederatedOAuthProviderData\n provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);\n\n2. **Optional**: Specify additional custom OAuth parameters that you want to\n send with the OAuth request.\n\n // Prompt user to re-authenticate to Microsoft.\n provider_data.custom_parameters[\"prompt\"] = \"login\";\n\n // Target specific email with login hint.\n provider_data.custom_parameters[\"login_hint\"] =\n \"user@firstadd.onmicrosoft.com\";\n\n For the parameters Microsoft supports, see the\n [Microsoft OAuth documentation](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code).\n Note that you can't pass Firebase-required parameters with\n `setCustomParameters()`. These parameters are **client_id** ,\n **response_type** , **redirect_uri** , **state** , **scope** and\n **response_mode**.\n\n To allow only users from a particular Azure AD tenant to sign\n into the application, either the friendly domain name of the Azure AD tenant\n or the tenant's GUID identifier can be used. This can be done by specifying\n the \"tenant\" field in the custom parameters object. \n\n // Optional \"tenant\" parameter in case you are using an Azure AD tenant.\n // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com'\n // or \"common\" for tenant-independent tokens.\n // The default value is \"common\".\n provider_data.custom_parameters[\"tenant\"] =\"TENANT_ID\";\n\n3. **Optional**: Specify additional OAuth 2.0 scopes beyond basic profile that\n you want to request from the authentication provider.\n\n provider_data.scopes.push_back(\"mail.read\");\n provider_data.scopes.push_back(\"calendars.read\");\n\n To learn more, refer to the\n [Microsoft permissions and consent documentation](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent).\n4. Once your provider data has been configured, use it to create a\n `FederatedOAuthProvider`.\n\n // Construct a FederatedOAuthProvider for use in Auth methods.\n firebase::auth::FederatedOAuthProvider provider(provider_data);\n\n5. Authenticate with Firebase using the Auth provider object. Note that unlike\n other FirebaseAuth operations, this will take control of your UI by popping\n up a web view in which the user can enter their credentials.\n\n To start the sign in flow, call `SignInWithProvider`: \n\n firebase::Future\u003cfirebase::auth::AuthResult\u003e result =\n auth-\u003eSignInWithProvider(provider_data);\n\n Your application may then wait or [register a callback on the Future](#register_callback_on_future).\n\n Using the OAuth access token, you can call the\n [Microsoft Graph API](https://docs.microsoft.com/en-us/graph/overview?toc=./toc.json&view=graph-rest-1.0).\n\n Unlike other providers supported by Firebase Auth, Microsoft does not\n provide a photo URL and instead, the binary data for a profile photo has to\n be requested via\n [Microsoft Graph API](https://docs.microsoft.com/en-us/graph/api/profilephoto-get?view=graph-rest-1.0).\n6. While the above examples focus on sign-in flows, you also have the\n ability to link a Microsoft Azure Active Directory provider to an existing\n user using `LinkWithProvider`. For example, you can link multiple\n providers to the same user allowing them to sign in with either.\n\n firebase::Future\u003cfirebase::auth::AuthResult\u003e result = user.LinkWithProvider(provider_data);\n\n7. The same pattern can be used with `ReauthenticateWithProvider` which can be\n used to retrieve fresh credentials for sensitive operations that require\n recent login.\n\n firebase::Future\u003cfirebase::auth::AuthResult\u003e result =\n user.ReauthenticateWithProvider(provider_data);\n\n Your application may then wait or [register a callback on\n the Future](#register_callback_on_future).\n\nAdvanced: Handle the sign-in flow manually\n------------------------------------------\n\nUnlike other OAuth providers supported by Firebase such as Google, Facebook,\nand Twitter, where sign-in can directly be achieved with OAuth access token\nbased credentials, Firebase Auth does not support the same capability for\nproviders such as Microsoft due to the inability of the Firebase\nAuth server to verify the audience of Microsoft OAuth access tokens.\nThis is a critical security requirement and could expose applications and\nwebsites to replay attacks where a Microsoft OAuth access token obtained for\none project (attacker) can be used to sign in to another project (victim).\nInstead, Firebase Auth offers the ability to handle the entire OAuth flow and\nthe authorization code exchange using the OAuth client ID and secret\nconfigured in the Firebase Console. As the authorization code can only be used\nin conjunction with a specific client ID/secret, an authorization code\nobtained for one project cannot be used with another.\n\nIf these providers are required to be used in unsupported environments, a\nthird party OAuth library and\n[Firebase custom authentication](../admin/create-custom-tokens)\nwould need to be used. The former is needed to authenticate with the provider\nand the latter to exchange the provider's credential for a custom token.\n\nNext steps\n----------\n\nAfter a user signs in for the first time, a new user account is created and\nlinked to the credentials---that is, the user name and password, phone\nnumber, or auth provider information---the user signed in with. This new\naccount is stored as part of your Firebase project, and can be used to identify\na user across every app in your project, regardless of how the user signs in.\n\n- In your apps, you can get the user's basic profile information from the\n [`firebase::auth::User`](/docs/reference/cpp/class/firebase/auth/user) object:\n\n ```c++\n firebase::auth::User user = auth-\u003ecurrent_user();\n if (user.is_valid()) {\n std::string name = user.display_name();\n std::string email = user.email();\n std::string photo_url = user.photo_url();\n // The user's ID, unique to the Firebase project.\n // Do NOT use this value to authenticate with your backend server,\n // if you have one. Use firebase::auth::User::Token() instead.\n std::string uid = user.uid();\n }\n ```\n- In your Firebase Realtime Database and Cloud Storage\n [Security Rules](/docs/database/security/user-security), you can\n get the signed-in user's unique user ID from the `auth` variable,\n and use it to control what data a user can access.\n\nYou can allow users to sign in to your app using multiple authentication\nproviders by [linking auth provider credentials to an\nexisting user account.](/docs/auth/cpp/account-linking)\n\nTo sign out a user, call [`SignOut()`](/docs/reference/cpp/class/firebase/auth/auth#signout): \n\n```c++\nauth-\u003eSignOut();\n```"]]