Authentifizieren mit Microsoft und C++

Sie können Ihren Benutzern die Authentifizierung bei 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 integrieren, um den End-to-End-Anmeldevorgang durchzuführen. Da dieser Ablauf die Verwendung der telefonbasierten Firebase SDKs erfordert, wird er nur auf Android- und Apple-Plattformen unterstützt.

Bevor Sie beginnen

  1. In Firebase zu Ihrem C ++ Projekt .
  2. In der Firebase Konsole , öffnen Sie den Abschnitt Auth.
  3. Auf dem Anmelden Methode Registerkarte, aktivieren Sie die Microsoft - Provider.
  4. Fügen Sie die Client - ID und Client - Geheimnis von dem betreffenden Anbieter Entwickler - Konsole an den Provider - Konfiguration:
    1. Um ein Microsoft OAuth - Client zu registrieren, folgen Sie den Anweisungen in Quickstart: Register eine App mit dem Azure Active Directory v2.0 Endpunkt . Beachten Sie, dass dieser Endpunkt die Anmeldung mit persönlichen Microsoft-Konten sowie mit Azure Active Directory-Konten unterstützt. Weitere über Azure Active Directory v2.0.
    2. Bei Anwendungen mit diesen Anbietern registrieren, müssen Sie die Registrierung *.firebaseapp.com Domain für Ihr Projekt als Redirect - Domain für Ihre App.
  5. Klicken Sie auf Speichern.

Besuchen Sie das firebase::auth::Auth Klasse

Die Auth - Klasse ist das Gateway für alle API - Aufrufe.
  1. Fügen Sie die Auth und App - Header - Dateien:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. In Ihrem Initialisierungscode, erstellen Sie 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__)
    
  3. Erwerben Sie die firebase::auth::Auth - Klasse für Ihre firebase::App . Es gibt eine Eins-zu-Eins - Abbildung zwischen App und Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Verwalten Sie den Anmeldevorgang mit dem Firebase SDK

Gehen Sie wie folgt vor, um den Anmeldevorgang mit dem Firebase SDK durchzuführen:

  1. Konstruieren Sie eine Instanz eines FederatedOAuthProviderData mit dem Provider - ID geeignet für Microsoft konfiguriert.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. Optional: Geben Sie zusätzliche benutzerdefinierte OAuth Parameter , die Sie mit dem 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";
    

    Für die Parameter Microsoft unterstützt, finden Sie in der Microsoft OAuth Dokumentation . Beachten Sie, dass Sie nicht Firebase-erforderliche Parameter mit übergeben können setCustomParameters() . Diese Parameter sind client_id, response_type, redirect_uri, Zustand, Umfang und response_mode.

    Damit sich nur Benutzer eines bestimmten Azure AD-Mandanten bei der Anwendung anmelden können, kann entweder der benutzerfreundliche Domänenname des Azure AD-Mandanten oder die GUID-ID des Mandanten verwendet werden. Dies kann durch Angabe des Felds "Mandant" im benutzerdefinierten Parameterobjekt erfolgen.

    // 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 jenseits Grundprofil , dass Sie auf Anfrage vom Authentifizierungs - Provider wollen.

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

    Um mehr zu erfahren, beziehen sich auf die Microsoft - Berechtigungen und Zustimmung Dokumentation .

  4. Nachdem Ihre Anbieterdaten konfiguriert wurden, verwenden Sie sie, um einen FederatedOAuthProvider zu erstellen.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Authentifizieren Sie sich bei Firebase mithilfe des Auth-Provider-Objekts. Beachten Sie, dass dies im Gegensatz zu anderen FirebaseAuth-Vorgängen die Kontrolle über Ihre Benutzeroberfläche übernimmt, indem eine Webansicht geöffnet wird, in der der Benutzer seine Anmeldeinformationen eingeben kann.

    Um das Vorzeichen in Fluss zu starten, rufen signInWithProvider :

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

    Ihre Anwendung kann dann warten oder einen Rückruf über die Zukunft registrieren .

    Unter Verwendung der OAuth - Zugriffstoken, können Sie den Anruf Microsoft Graph API .

    Im Gegensatz zu anderen Anbietern von Firebase Auth unterstützt wird , hat Microsoft kein Foto URL zur Verfügung stellen und stattdessen hat die binären Daten für ein neue Profil - Foto über angefordert werden Microsoft Graph API .

  6. Während die obigen Beispiele auf Anmelde-Flows konzentrieren, haben Sie auch die Möglichkeit , einen Microsoft Azure Active Directory - Anbieter zu einem vorhandenen Benutzer verwenden zu verknüpfen LinkWithProvider . Sie können beispielsweise mehrere Anbieter mit demselben Benutzer verknüpfen, sodass sie sich bei beiden anmelden können.

    firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
    
  7. Das gleiche Muster kann mit verwendet wird ReauthenticateWithProvider die verwendet werden können frische Anmeldeinformationen für sensible Vorgänge abzurufen , die letzte Anmeldung erforderlich.

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

    Ihre Anwendung kann dann warten oder einen Rückruf über die Zukunft registrieren .

Nächste Schritte

Nachdem sich ein Benutzer zum ersten Mal anmeldet, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen – d. h. Benutzername und Kennwort, Telefonnummer oder Authentifizierungsanbieterinformationen – verknüpft, mit denen sich der Benutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Benutzer anmeldet.

  • In Ihren Anwendungen können Sie die Benutzerprofilgrundinformationen aus dem erhaltenen 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();
    }
    
  • In Ihrer Datenbank und Firebase Realtime Cloud Storage Sicherheitsregeln , können Sie die angemeldeten Nutzer die eindeutige Benutzer - ID aus der bekommen auth Variable, und es verwenden , um steuern kann ein Benutzer Zugriff , welche Daten.

Sie können Benutzer erlauben , durch mehrere Authentifizierungsanbieter anmelden, um Ihre App Verknüpfung Auth - Provider - Anmeldeinformationen zu einem vorhandenen Benutzerkonto.

Um einen Benutzer abzumelden, rufen SignOut() :

auth->SignOut();