Uwierzytelnianie za pomocą Microsoft i C++

Możesz umożliwić użytkownikom uwierzytelnianie w Firebase przy użyciu dostawców OAuth, takich jak Microsoft Azure Active Directory, integrując ogólne internetowe logowanie OAuth ze swoją aplikacją przy użyciu pakietu Firebase SDK w celu przeprowadzenia pełnego procesu logowania. Ponieważ ten przepływ wymaga użycia telefonów Firebase SDK, jest obsługiwany tylko na platformach Android i Apple.

Zanim zaczniesz

  1. Dodaj Firebase do projektu C ++ .
  2. W konsoli Firebase otwórz sekcję Auth.
  3. Na karcie Logowanie w metodzie umożliwienia usługodawcy Microsoft.
  4. Dodaj identyfikator klienta oraz tajny z konsoli programisty dostawcy do konfiguracji operatora:
    1. Aby zarejestrować klienta Microsoft OAuth, postępuj zgodnie z instrukcjami Szybki start: Rejestracja aplikacja z Azure Aktywny v2.0 katalog końcowym . Należy pamiętać, że ten punkt końcowy obsługuje logowanie przy użyciu kont osobistych firmy Microsoft oraz kont usługi Azure Active Directory. Dowiedz się więcej o Azure Active Directory v2.0.
    2. Przy rejestracji aplikacje z tych dostawców, należy zarejestrować *.firebaseapp.com domenę dla swojego projektu jako przekierowania domeny dla swojej aplikacji.
  5. Kliknij przycisk Zapisz.

Uzyskaj dostęp do firebase::auth::Auth klasę

Auth klasa jest bramą do wszystkich wywołań API.
  1. Dodaj pliki nagłówka uwierzytelniania i aplikacji:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. W kodzie inicjującym utwórz firebase::App klasy.
    #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. Nabyć firebase::auth::Auth klasę dla firebase::App . Istnieje odwzorowanie jeden do jednego między App i Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Obsługuj proces logowania za pomocą pakietu Firebase SDK

Aby obsłużyć proces logowania za pomocą pakietu Firebase SDK, wykonaj te czynności:

  1. Skonstruować instancję FederatedOAuthProviderData skonfigurowanych z odpowiednim dostawcą identyfikator Microsoft.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. Opcjonalnie: Określ dodatkowe parametry niestandardowe OAuth że chcesz wysłać z prośbą 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";
    

    Na podporach parametry firmy Microsoft można znaleźć w dokumentacji Microsoft OAuth . Należy pamiętać, że nie można przejść Firebase-wymagane parametry z setCustomParameters() . Parametry te są client_id, response_type, redirect_uri, stan, zakres i response_mode.

    Aby umożliwić logowanie się do aplikacji tylko użytkownikom z określonej dzierżawy usługi Azure AD, można użyć przyjaznej nazwy domeny dzierżawy usługi Azure AD lub identyfikatora GUID dzierżawy. Można to zrobić, określając pole „dzierżawca” w obiekcie parametrów niestandardowych.

    // 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. Opcjonalnie: określić dodatkowe zakresy OAuth 2.0 oprócz podstawowego profilu, który chcesz wniosek dostawcy uwierzytelniania.

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

    Aby dowiedzieć się więcej, zapoznaj się z dokumentacją uprawnień i zgody Microsoft .

  4. Po skonfigurowaniu danych dostawcy użyj ich do utworzenia FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Uwierzytelnij się w Firebase przy użyciu obiektu dostawcy uwierzytelniania. Pamiętaj, że w przeciwieństwie do innych operacji FirebaseAuth ta funkcja przejmie kontrolę nad interfejsem użytkownika, wyświetlając widok internetowy, w którym użytkownik może wprowadzić swoje dane logowania.

    Aby rozpocząć znak w strumieniu, zadzwoń signInWithProvider :

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

    Aplikacja może następnie poczekać lub zarejestrować wywołania zwrotnego na przyszłość .

    Korzystanie z tokenu dostępu OAuth, możesz zadzwonić do API Microsoft Graph .

    W przeciwieństwie do innych dostawców obsługiwanych przez Firebase Auth, Microsoft nie daje zdjęć URL, a zamiast tego, dane binarne o zdjęcie profilu musi być wymagane przez Microsoft Graph API .

  6. Choć powyższe przykłady koncentrują się na znaku w przepływach, masz również możliwość połączenia się Microsoft Azure dostawcy usługi Active Directory do istniejącego użytkownika z wykorzystaniem LinkWithProvider . Na przykład możesz połączyć wielu dostawców z tym samym użytkownikiem, umożliwiając im logowanie się za pomocą jednego z nich.

    firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
    
  7. Ten sam wzór może być stosowany z ReauthenticateWithProvider które mogą być wykorzystywane do pobierania świeże poświadczenia dla wrażliwych operacji, które wymagają ostatnie logowanie.

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

    Aplikacja może następnie poczekać lub zarejestrować wywołania zwrotnego na przyszłość .

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z poświadczeniami — czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania — przy użyciu których użytkownik się zalogował. To nowe konto jest przechowywane jako część projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od tego, jak się on loguje.

  • W aplikacjach, można uzyskać podstawowe informacje o profilu użytkownika z firebase::auth::User obiektu:

    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();
    }
    
  • W bazie danych Firebase Realtime i Cloud Storage zasad bezpieczeństwa , można uzyskać podpisanego w unikalnym identyfikatorem użytkownika użytkownika z auth zmiennej i użyć go do kontroli, jakie dane dostępu może użytkownik.

Można zezwolić użytkownikom na logowanie się do aplikacji przy użyciu wielu dostawców uwierzytelniania przez łączenie auth poświadczenia dostawcy do istniejącego konta użytkownika.

Aby wylogować użytkownika, zadzwoń SignOut() :

auth->SignOut();