Możesz umożliwić użytkownikom uwierzytelnianie w Firebase za pomocą dostawców OAuth, takich jak Microsoft Azure Active Directory, integrując w aplikacji ogólne logowanie OAuth oparte na internecie za pomocą pakietu SDK Firebase, aby przeprowadzić cały proces logowania. Ten proces wymaga użycia pakietów SDK Firebase na telefon, dlatego jest obsługiwany tylko na platformach Android i Apple.
Zanim zaczniesz
- Dodaj Firebase do projektu C++.
- W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.
- Na karcie Metoda logowania włącz dostawcę logowania Microsoft.
-
Dodaj identyfikator klienta i tajny klucz klienta z konsoli deweloperskiej tego dostawcy do konfiguracji dostawcy:
- Aby zarejestrować klienta OAuth Microsoft, postępuj zgodnie z instrukcjami w tym przewodniku. Pamiętaj, że ten punkt końcowy obsługuje logowanie za pomocą osobistych kont Microsoft, a także kont Azure Active Directory. Dowiedz się więcej o Azure Active Directory w wersji 2.0.
-
Podczas rejestrowania aplikacji u tych dostawców pamiętaj, aby zarejestrować
*.firebaseapp.comdomenę projektu jako domenę przekierowania aplikacji.
- Kliknij Zapisz.
Otwórz zajęcia firebase::auth::Auth.
Klasa Auth jest bramą dla wszystkich wywołań interfejsu API.
- Dodaj pliki nagłówkowe Auth i App:
#include "firebase/app.h" #include "firebase/auth.h"
- 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__)
- Uzyskaj dostęp do zajęć
firebase::auth::Authdlafirebase::App. Istnieje mapowanie 1:1 międzyAppaAuth.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Obsługa procesu logowania za pomocą pakietu Firebase SDK
Aby obsłużyć proces logowania za pomocą pakietu Firebase SDK, wykonaj te czynności:
Utwórz instancję
FederatedOAuthProviderDataskonfigurowaną z identyfikatorem dostawcy odpowiednim dla Microsoftu.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);Opcjonalnie: określ dodatkowe parametry niestandardowe protokołu OAuth, które chcesz wysłać wraz 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 OAuth firmy Microsoft. Pamiętaj, że nie możesz przekazywać parametrów wymaganych przez Firebase za pomocą znaku
setCustomParameters(). Są to parametry client_id, response_type, redirect_uri, state, scope i response_mode.Aby zezwolić na logowanie do aplikacji tylko użytkownikom z określonej dzierżawy Azure AD, możesz użyć przyjaznej nazwy domeny dzierżawy Azure AD lub identyfikatora GUID dzierżawy. Możesz to zrobić, określając pole „tenant” 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";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 firmy Microsoft dotyczącej uprawnień i zgody użytkowników.
Po skonfigurowaniu danych dostawcy możesz ich użyć do utworzenia
FederatedOAuthProvider.// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);Uwierzytelnij się w Firebase za pomocą obiektu dostawcy Uwierzytelniania. Pamiętaj, że w przeciwieństwie do innych operacji FirebaseAuth ta operacja przejmie kontrolę nad interfejsem, wyświetlając widok internetowy, w którym użytkownik może wpisać swoje dane logowania.
Aby rozpocząć proces logowania, wywołaj funkcję
SignInWithProvider:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);Aplikacja może wtedy poczekać lub zarejestrować wywołanie zwrotne w obiekcie Future.
Za pomocą tokena dostępu OAuth możesz wywoływać Microsoft Graph API.
W przeciwieństwie do innych dostawców obsługiwanych przez Firebase Uwierzytelnianie Microsoft nie udostępnia adresu URL zdjęcia. Zamiast tego dane binarne zdjęcia profilowego należy pobrać za pomocą interfejsu Microsoft Graph API.
Powyższe przykłady dotyczą przepływów 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ć wielu dostawców z tym samym użytkownikiem, aby mógł on logować się za pomocą dowolnego z nich.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);Ten sam wzorzec można stosować w przypadku funkcji
ReauthenticateWithProvider, która umożliwia pobieranie nowych danych logowania do operacji związanych z poufnymi danymi, które wymagają niedawnego zalogowania się.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);Aplikacja może wtedy poczekać lub zarejestrować wywołanie zwrotne w obiekcie Future.
Dalsze kroki
Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z danymi logowania, czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania, za pomocą których użytkownik się zalogował. Nowe konto jest przechowywane w projekcie w Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w projekcie, niezależnie od sposobu logowania.
-
W 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 Firebase Realtime Database i Cloud Storage regułach bezpieczeństwa możesz pobrać unikalny identyfikator zalogowanego użytkownika ze zmiennej
authi użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.
Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą wielu dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.
Aby wylogować użytkownika, wywołaj funkcję
SignOut():
auth->SignOut();