Uwierzytelnij się 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 swojego projektu C++ .
  2. W konsoli Firebase otwórz sekcję Auth .
  3. Na karcie Metoda logowania włącz dostawcę firmy Microsoft .
  4. Dodaj identyfikator klienta i klucz tajny klienta z konsoli programisty tego dostawcy do konfiguracji dostawcy:
    1. Aby zarejestrować klienta Microsoft OAuth, postępuj zgodnie z instrukcjami w Szybki start: Zarejestruj aplikację w punkcie końcowym Azure Active Directory v2.0 . Należy pamiętać, że ten punkt końcowy obsługuje logowanie przy użyciu kont osobistych Microsoft oraz kont Azure Active Directory. Dowiedz się więcej o Azure Active Directory v2.0.
    2. Rejestrując aplikacje u tych dostawców, pamiętaj, aby zarejestrować domenę *.firebaseapp.com projektu jako domenę przekierowania aplikacji.
  5. Kliknij Zapisz .

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

Klasa Auth jest bramą dla wszystkich wywołań API.
  1. Dodaj pliki nagłówkowe Auth i App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. W kodzie inicjującym utwórz klasę 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. Uzyskaj klasę firebase::auth::Auth dla swojej firebase::App . Istnieje mapowanie 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 następujące kroki:

  1. Utwórz wystąpienie FederatedOAuthProviderData skonfigurowane z identyfikatorem dostawcy odpowiednim dla firmy Microsoft.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. Opcjonalnie : określ dodatkowe niestandardowe parametry OAuth, które chcesz wysłać z żądaniem 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";
    

    Parametry obsługiwane przez firmę Microsoft można znaleźć w dokumentacji Microsoft OAuth . Pamiętaj, że za pomocą setCustomParameters() nie możesz przekazać parametrów wymaganych przez Firebase. Te parametry to client_id , response_type , redirect_uri , state , scope i response_mode .

    Aby zezwolić tylko użytkownikom z określonej dzierżawy usługi Azure AD na logowanie do aplikacji, 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śl dodatkowe zakresy OAuth 2.0 poza profilem podstawowym, których chcesz zażądać od 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ą dotyczącą uprawnień i zgody firmy 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 uwierzytelniające.

    Aby rozpocząć proces logowania, wywołaj signInWithProvider :

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

    Twoja aplikacja może wtedy czekać lub zarejestrować oddzwonienie w przyszłości .

    Używając tokenu dostępu OAuth, możesz wywołać interfejs Microsoft Graph API .

    W przeciwieństwie do innych dostawców obsługiwanych przez Firebase Auth firma Microsoft nie udostępnia adresu URL zdjęcia, a zamiast tego dane binarne dla zdjęcia profilowego należy zażądać za pośrednictwem interfejsu Microsoft Graph API .

  6. Chociaż powyższe przykłady koncentrują się na przepływach logowania, możesz również połączyć dostawcę usługi Microsoft Azure Active Directory z istniejącym użytkownikiem przy użyciu 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 wzorzec może być używany z ReauthenticateWithProvider , który może służyć do pobierania świeżych poświadczeń dla poufnych operacji, które wymagają niedawnego logowania.

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

    Twoja aplikacja może wtedy czekać lub zarejestrować oddzwonienie w przyszłości .

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 — za pomocą 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 swoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu 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();
    }
    
  • W regułach bezpieczeństwa bazy danych czasu rzeczywistego i usługi Cloud Storage Firebase możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i używać go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.

Możesz zezwolić użytkownikom na logowanie się do Twojej aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika.

Aby wylogować użytkownika, wywołaj SignOut() :

auth->SignOut();