Mit Microsoft und C++ authentifizieren

Sie können Ihre Nutzer über OAuth-Anbieter wie Microsoft Azure Active Directory mit Firebase authentifizieren. Dazu müssen Sie die webbasierte generische OAuth-Anmeldung mit dem Firebase SDK in Ihre App einbinden, um den End-to-End-Anmeldevorgang durchzuführen. Da für diesen Ablauf die telefonbasierten Firebase SDKs verwendet werden müssen, die auf Android- und Apple-Plattformen unterstützt werden.

Hinweis

  1. Fügen Sie Ihrem C++-Projekt Firebase hinzu.
  2. Öffnen Sie in der Firebase Console den Bereich Auth.
  3. Aktivieren Sie auf dem Tab Anmeldemethode den Anbieter Microsoft.
  4. Fügen Sie die Client-ID und das Client-Secret aus der Entwicklerkonsole des Anbieters zur Anbieterkonfiguration hinzu:
    1. 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 Azure Active Directory-Konten. Weitere Informationen zu Azure Active Directory v2.0
    2. Achten Sie bei der Registrierung von Apps bei diesen Anbietern darauf, die *.firebaseapp.com-Domain für Ihr Projekt als Weiterleitungsdomain für Ihr
  5. Klicken Sie auf Speichern.

Auf die Klasse firebase::auth::Auth zugreifen

Die Klasse Auth ist das Gateway für alle API-Aufrufe.
  1. Fügen Sie die Auth- und App-Headerdateien hinzu:
    #include "firebase/app.h"
    #include "firebase/auth.h"
  2. Erstellen Sie in Ihrem Initialisierungscode einen Klasse 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. Erwerben Sie die Klasse „firebase::auth::Auth“ für Ihr Gerät „firebase::App“. Es gibt eine Eins-zu-Eins-Zuordnung zwischen App und Auth.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);

Anmeldevorgang mit dem Firebase SDK durchführen

So verwalten Sie den Anmeldevorgang mit dem Firebase SDK:

  1. Instanz einer FederatedOAuthProviderData erstellen, die konfiguriert wurde mit die für Microsoft entsprechende Anbieter-ID.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Parameter an, die Sie mit der OAuth-Anfrage senden.

    // 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 Hinweis: Sie können keine für Firebase erforderlichen Parameter mit setCustomParameters() übergeben. Diese Parameter sind client_id, response_type, redirect_uri, state, scope und response_mode.

    So erlauben Sie nur Nutzern aus einem bestimmten Azure AD-Mandanten, sich anzumelden in die Anwendung einbinden, entweder den Anzeigenamen des Azure AD-Mandanten oder die GUID-Kennung des Mandanten verwendet werden. Geben Sie dazu das Feld „tenant“ im Objekt „custom_parameters“ 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";
    
  3. Optional: Geben Sie zusätzliche OAuth 2.0-Bereiche an, die Sie zusätzlich zum grundlegenden Profil 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 Berechtigungen und Einwilligungen von Microsoft.

  4. Nachdem Sie Ihre Anbieterdaten konfiguriert haben, können Sie damit eine FederatedOAuthProvider

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Authentifizieren Sie sich bei Firebase mithilfe des Auth-Anbieterobjekts. Im Gegensatz zu anderen FirebaseAuth-Vorgängen hinzugefügt wurde, wird die Benutzeroberfläche gesteuert, Webansicht öffnen, in der der Nutzer seine Anmeldedaten eingeben kann.

    Rufen Sie SignInWithProvider auf, um den Anmeldevorgang zu starten:

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

    Ihre Anwendung kann dann warten oder einen Rückruf für die Future-Funktion registrieren.

    Mit dem OAuth-Zugriffstoken können Sie die Methode Microsoft Graph API

    Im Gegensatz zu anderen Anbietern, die von Firebase Auth unterstützt werden, eine Foto-URL angeben. Stattdessen müssen die Binärdaten für ein Profilfoto angefordert über Microsoft Graph API

  6. Die obigen Beispiele konzentrieren sich zwar auf Anmeldeabläufe, Sie haben aber auch die Möglichkeit, Möglichkeit zum Verknüpfen eines Microsoft Azure Active Directory-Anbieters mit einem vorhandenen Nutzer mit LinkWithProvider. Sie können beispielsweise mehrere demselben Nutzer zu, damit sie sich mit beiden anmelden können.

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. Dasselbe Muster kann mit ReauthenticateWithProvider verwendet werden, wobei werden zum Abrufen neuer Anmeldedaten für vertrauliche Vorgänge verwendet, die Letzte Anmeldung

    firebase::Future<firebase::auth::AuthResult> result =
      user.ReauthenticateWithProvider(provider_data);
    

    Ihre Anwendung wartet dann entweder oder registriert einen Rückruf auf in die Zukunft.

Anders als bei anderen von Firebase unterstützten OAuth-Anbietern wie Google, Facebook und Twitter, bei denen die Anmeldung direkt mit OAuth-Zugriffstoken-basierten Anmeldedaten erfolgen kann, unterstützt Firebase Auth diese Funktion nicht für Anbieter wie Microsoft, da der Firebase Auth-Server die Zielgruppe von Microsoft OAuth-Zugriffstokens nicht überprüfen kann. Dies ist eine wichtige Sicherheitsanforderung. Andernfalls könnten Anwendungen und Websites von Replay-Angriffen betroffen sein, bei denen ein für ein Projekt (Angreifer) abgerufenes Microsoft OAuth-Zugriffstoken verwendet wird, um sich in einem anderen Projekt (Opfer) anzumelden. Stattdessen bietet Firebase Auth die Möglichkeit, den gesamten OAuth-Ablauf Autorisierungscode-Austausch mit OAuth-Client-ID und -Secret die in der Firebase Console konfiguriert wurden. Da der Autorisierungscode nur in Verbindung mit einer bestimmten Client-ID/einem bestimmten Secret verwendet werden kann, kann ein Autorisierungscode, der für ein Projekt abgerufen wurde, nicht für ein anderes verwendet werden.

Wenn diese Anbieter in nicht unterstützten Umgebungen verwendet werden müssen, müssen eine OAuth-Bibliothek eines Drittanbieters und die benutzerdefinierte Firebase-Authentifizierung verwendet werden. Ersteres ist erforderlich, um sich beim Anbieter zu authentifizieren, und letzteres, um die Anmeldedaten des Anbieters gegen ein benutzerdefiniertes Token auszutauschen.

Nächste Schritte

Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und die mit den Anmeldedaten verknüpft sind, d. h. Nutzername und Passwort, oder Authentifizierungsanbieter-Informationen – also für den Nutzer, mit dem sich der Nutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps in Ihrem Projekt zu identifizieren, unabhängig davon, wie er sich anmeldet.

  • In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers über das Objekt firebase::auth::User 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 Ihren Firebase Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.

Sie können Nutzern erlauben, sich mit Mehrfachauthentifizierung in Ihrer App anzumelden indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem eines bestehenden Nutzerkontos.

Rufen Sie auf, um einen Nutzer abzumelden. SignOut():

auth->SignOut();