Uwierzytelniaj za pomocą programów Microsoft i C++

Aby umożliwić użytkownikom uwierzytelnianie w Firebase za pomocą dostawców protokołu OAuth, takich jak Microsoft Azure Active Directory, możesz zintegrować z aplikacją ogólne internetowe logowanie OAuth przy użyciu pakietu SDK Firebase w celu przeprowadzenia kompleksowego procesu logowania. Ten proces wymaga użycia pakietów SDK Firebase na telefon, dlatego jest obsługiwany tylko na platformach Apple i Androida.

Zanim zaczniesz

  1. Dodaj Firebase do projektu C++.
  2. W konsoli Firebase otwórz sekcję Uwierzytelnianie.
  3. Na karcie Metoda logowania włącz dostawcę Microsoft.
  4. Dodaj Client ID (Identyfikator klienta) i Client Secret (Tajny klucz klienta) z konsoli programisty tego dostawcy do konfiguracji dostawcy:
    1. Aby zarejestrować klienta Microsoft OAuth, postępuj zgodnie z instrukcjami zawartymi w artykule Krótkie wprowadzenie: rejestrowanie aplikacji w punkcie końcowym Azure Active Directory w wersji 2.0. Pamiętaj, że ten punkt końcowy obsługuje logowanie się przy użyciu kont osobistych Microsoft oraz kont Azure Active Directory. Dowiedz się więcej o Azure Active Directory w wersji 2.0.
    2. Rejestrując aplikacje u tych dostawców, pamiętaj, aby zarejestrować domenę *.firebaseapp.com dla Twojego projektu jako domenę przekierowującą aplikacji.
  5. Kliknij Zapisz.

Uzyskaj dostęp do zajęć firebase::auth::Auth

Klasa Auth jest bramą dla wszystkich wywołań interfejsu API.
  1. Dodaj pliki nagłówka uwierzytelniania i aplikacji:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. W kodzie inicjowania 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 zajęcia firebase::auth::Auth związane z urządzeniem firebase::App. Między App a Auth występuje mapowanie 1:1.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Zarejestruj się za pomocą pakietu SDK Firebase

Aby zalogować się za pomocą pakietu SDK Firebase, wykonaj te czynności:

  1. Utwórz instancję instancji FederatedOAuthProviderData skonfigurowaną za pomocą identyfikatora dostawcy odpowiedniego dla firmy Microsoft.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. Opcjonalnie: określ dodatkowe niestandardowe parametry OAuth, które chcesz wysył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 Microsoft znajdziesz w dokumentacji protokołu Microsoft OAuth. Pamiętaj, że za pomocą setCustomParameters() nie możesz przekazywać parametrów wymaganych przez Firebase. Są to: client_id, response_type, redirect_uri, state, scope i response_mode.

    Aby zezwolić na logowanie się do aplikacji tylko użytkownikom określonego najemcy Azure AD, można użyć przyjaznej nazwy domeny najemcy Azure AD lub identyfikatora GUID najemcy. Można to zrobić, określając pole „najemca” 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 podstawowym profilem, o które chcesz poprosić dostawcę uwierzytelniania.

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

    Więcej informacji znajdziesz w dokumentacji dotyczącej 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. Uwierzytelniaj w Firebase za pomocą obiektu dostawcy uwierzytelniania. Pamiętaj, że w przeciwieństwie do innych operacji FirebaseAuth da to kontrolę nad interfejsem użytkownika – wyświetli się widok witryny, w którym użytkownik może wpisać swoje dane logowania.

    Aby rozpocząć procedurę logowania, zadzwoń pod numer SignInWithProvider:

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

    Aplikacja może zaczekać lub zarejestrować wywołanie zwrotne w przyszłości.

    Za pomocą tokena dostępu OAuth możesz wywoływać interfejs Microsoft Graph API.

    W przeciwieństwie do innych dostawców obsługiwanych przez Uwierzytelnianie Firebase Microsoft nie podaje adresu URL zdjęcia. Zamiast tego dane binarne zdjęcia profilowego należy wysyłać za pomocą interfejsu Microsoft Graph API.

  6. Powyższe przykłady koncentrują się na przepływach logowania, ale możesz też połączyć dostawcę Microsoft Azure Active Directory z istniejącym użytkownikiem za pomocą LinkWithProvider. Możesz na przykład połączyć kilku dostawców z tym samym użytkownikiem, umożliwiając im logowanie się za pomocą dowolnej z tych usług.

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. Tego samego wzorca można używać z zasadą ReauthenticateWithProvider, która umożliwia pobieranie nowych danych logowania na potrzeby poufnych operacji, które wymagają niedawnego zalogowania.

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

    Aplikacja może wtedy zaczekać lub zarejestrować wywołanie zwrotne w przyszłości.

Dalsze kroki

Gdy użytkownik loguje się po raz pierwszy, tworzone jest nowe konto użytkownika, które jest łączone z danymi logowania (nazwa użytkownika i hasło, numer telefonu lub informacje o dostawcy uwierzytelniania). Nowe konto jest przechowywane w ramach Twojego projektu Firebase i może być używane do identyfikowania użytkowników we wszystkich aplikacjach w Twoim 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.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();
    }
    
  • W regułach zabezpieczeń Bazy danych czasu rzeczywistego Firebase i Cloud Storage możesz pobrać ze zmiennej auth unikalny identyfikator użytkownika zalogowanego użytkownika i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.

Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu różnych dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.

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

auth->SignOut();