Sie können Nutzern die Authentifizierung mit Firebase über OAuth-Anbieter wie Microsoft Azure Active Directory ermöglichen, indem Sie die webbasierte generische OAuth-Anmeldung mithilfe des Firebase SDK in Ihre App einbinden, um den gesamten Anmeldeablauf auszuführen. Da für diesen Ablauf die phone-basierten Firebase SDKs erforderlich sind, wird er nur auf Android- und Apple-Plattformen unterstützt.
Hinweis
- Fügen Sie Ihrem C++-Projekt Firebase hinzu.
- Rufen Sie in der Firebase Console Security > Authentication auf.
- Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Microsoft sign-in.
-
Fügen Sie der Anbieterkonfiguration die Client-ID und das Clientschlüssel aus der Entwicklerkonsole des Anbieters hinzu:
- Folgen Sie der Anleitung unter Kurzanleitung: Anwendung mit dem Azure Active Directory v2.0-Endpunkt registrieren, um einen Microsoft OAuth-Client zu registrieren. Dieser Endpunkt unterstützt die Anmeldung mit privaten Microsoft-Konten sowie mit Azure Active Directory-Konten. Weitere Informationen zu Azure Active Directory v2.0.
-
Wenn Sie Apps bei diesen Anbietern registrieren, müssen Sie die
*.firebaseapp.comDomain für Ihr Projekt als Weiterleitungs Domain für Ihre App registrieren.
- Klicken Sie auf Speichern.
Auf die Klasse firebase::auth::Auth zugreifen
Die Klasse Auth ist das Gateway für alle API-Aufrufe.
- Fügen Sie die Headerdateien „Auth“ und „App“ hinzu:
#include "firebase/app.h" #include "firebase/auth.h"
- Erstellen Sie in Ihrem Initialisierungscode eine
firebase::App-Klasse.#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__)
- Rufen Sie die Klasse
firebase::auth::Authfür Ihrefirebase::Appab. Es gibt eine 1:1-Zuordnung zwischenAppundAuth.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Anmeldeablauf mit dem Firebase SDK verarbeiten
So verarbeiten Sie den Anmeldeablauf mit dem Firebase SDK:
Erstellen Sie eine Instanz von
FederatedOAuthProviderData, die mit der für Microsoft geeigneten Anbieter-ID konfiguriert ist.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Parameter an, die Sie mit der OAuth-Anfrage senden möchten.
// 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";Informationen zu den von Microsoft unterstützten Parametern finden Sie in der Microsoft OAuth-Dokumentation. Firebase-Parameter können nicht mit
setCustomParameters()übergeben werden. Diese Parameter sind client_id, response_type, redirect_uri, state, scope und response_mode.Wenn sich nur Nutzer eines bestimmten Azure AD-Mandanten in der Anwendung anmelden dürfen, kann entweder der Anzeigename des Azure AD-Mandanten oder seine GUID-Kennung verwendet werden. Dazu geben Sie das Feld „tenant“ im benutzerdefinierten Parameterobjekt an.
// 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";Optional: Geben Sie zusätzliche OAuth 2.0-Bereiche über das grundlegende Profil hinaus an, die Sie vom Authentifizierungsanbieter anfordern möchten.
provider_data.scopes.push_back("mail.read"); provider_data.scopes.push_back("calendars.read");Weitere Informationen finden Sie in der Dokumentation zu Microsoft-Berechtigungen und -Einwilligungen.
Nachdem Sie die Anbieterdaten konfiguriert haben, können Sie damit ein
FederatedOAuthProvidererstellen.// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);Authentifizieren Sie sich mit dem Auth-Anbieterobjekt bei Firebase. Beachten Sie, dass im Gegensatz zu anderen FirebaseAuth-Vorgängen dabei die Steuerung Ihrer Benutzeroberfläche übernommen wird, indem eine Webansicht eingeblendet wird, in der der Nutzer seine Anmeldedaten eingeben kann.
Rufen Sie
SignInWithProviderauf, um den Anmeldeablauf zu starten:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);Ihre Anwendung kann dann warten oder einen Callback für die Future registrieren.
Mit dem OAuth-Zugriffstoken können Sie die Microsoft Graph API aufrufen.
Anders als andere von Firebase Auth unterstützte Anbieter stellt Microsoft keine Foto-URL bereit. Stattdessen müssen die Binärdaten für ein Profilbild über die Microsoft Graph API angefordert werden.
In den obigen Beispielen geht es um Anmeldeabläufe. Sie können aber auch einen Microsoft Azure Active Directory-Anbieter mit
LinkWithProvidermit einem vorhandenen Nutzer verknüpfen. So können Sie beispielsweise mehrere Anbieter mit demselben Nutzer verknüpfen, damit er sich mit beiden anmelden kann.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);Dasselbe Muster kann mit
ReauthenticateWithProviderverwendet werden, um neue Anmeldedaten für vertrauliche Vorgänge abzurufen, für die eine aktuelle Anmeldung erforderlich ist.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);Ihre Anwendung kann dann warten oder einen Callback für die Future registrieren.
Nächste Schritte
Wenn sich ein Nutzer zum ersten Mal anmeldet, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps Ihres Projekts zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.
-
In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem
firebase::auth::UserObjekt abrufen: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(); }
In den Firebase Realtime Database und Cloud Storage Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen
authabrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
Sie können Nutzern die Anmeldung in Ihrer App mit mehreren Authentifizierungsanbietern ermöglichen, indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.
Rufen Sie
SignOut() auf, um einen Nutzer abzumelden:
auth->SignOut();