Możesz pozwolić użytkownikom na uwierzytelnianie w Firebase przy użyciu dostawców OAuth, takich jak Microsoft Azure Active Directory, integrując internetowe ogólne logowanie OAuth ze swoją aplikacją za pomocą pakietu SDK Firebase w celu przeprowadzenia kompleksowego procesu logowania. Ponieważ ten przepływ wymaga użycia zestawów SDK Firebase na telefon, jest obsługiwany tylko na platformach Android i Apple.
Zanim zaczniesz
- Dodaj Firebase do swojego projektu C++ .
- W konsoli Firebase otwórz sekcję Uwierzytelnianie .
- Na karcie Metoda logowania włącz dostawcę Microsoft .
- Dodaj identyfikator klienta i klucz tajny klienta z konsoli programisty tego dostawcy do konfiguracji dostawcy:
- Aby zarejestrować klienta Microsoft OAuth, postępuj zgodnie z instrukcjami w przewodniku Szybki Start: Rejestrowanie aplikacji 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 w wersji 2.0.
- Rejestrując aplikacje u tych dostawców, pamiętaj o zarejestrowaniu domeny
*.firebaseapp.com
dla swojego projektu jako domeny przekierowującej dla Twojej aplikacji.
- Kliknij Zapisz .
Uzyskaj dostęp do klasy firebase::auth::Auth
Klasa Auth
jest bramą dla wszystkich wywołań API.- Dodaj pliki nagłówkowe Auth i App:
#include "firebase/app.h" #include "firebase/auth.h"
- 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__)
- Zdobądź klasę
firebase::auth::Auth
dla swojejfirebase::App
. Istnieje mapowanie jeden do jednego pomiędzyApp
iAuth
.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Obsługuj proces logowania za pomocą pakietu SDK Firebase
Aby obsłużyć proces logowania za pomocą pakietu SDK Firebase, wykonaj następujące kroki:
Utwórz instancję
FederatedOAuthProviderData
skonfigurowaną z identyfikatorem dostawcy odpowiednim dla firmy Microsoft.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
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";
Informacje na temat parametrów obsługiwanych przez firmę Microsoft można znaleźć w dokumentacji Microsoft OAuth . Pamiętaj, że nie możesz przekazywać parametrów wymaganych przez Firebase za pomocą
setCustomParameters()
. Te parametry to id_klienta , typ_odpowiedzi , redirect_uri , stan , zakres i tryb_odpowiedzi .Aby zezwolić tylko użytkownikom z określonej dzierżawy usługi Azure AD na logowanie się do aplikacji, można użyć przyjaznej nazwy domeny dzierżawy usługi Azure AD lub identyfikatora GUID dzierżawy. Można tego dokonać poprzez określenie pola „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";
Opcjonalnie : określ dodatkowe zakresy protokołu OAuth 2.0 poza profilem podstawowym, o które chcesz poprosić dostawcę 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 zgód firmy Microsoft .
Po skonfigurowaniu danych dostawcy użyj ich do utworzenia
FederatedOAuthProvider
.// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
Uwierzytelnij się w Firebase przy użyciu obiektu dostawcy uwierzytelniania. Pamiętaj, że w przeciwieństwie do innych operacji FirebaseAuth, ta przejmie kontrolę nad Twoim 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::AuthResult> result = auth->SignInWithProvider(provider_data);
Twoja aplikacja może wtedy poczekać lub zarejestrować oddzwonienie w Future .
Korzystając z tokena dostępu OAuth, możesz wywołać interfejs API Microsoft Graph .
W przeciwieństwie do innych dostawców obsługiwanych przez Firebase Auth, firma Microsoft nie podaje adresu URL zdjęcia, zamiast tego należy poprosić o dane binarne zdjęcia profilowego za pośrednictwem interfejsu API Microsoft Graph .
Chociaż powyższe przykłady skupiają się na przepływach logowania, istnieje również możliwość połączenia dostawcy Microsoft Azure Active Directory z istniejącym użytkownikiem za pomocą
LinkWithProvider
. Na przykład możesz powiązać wielu dostawców z tym samym użytkownikiem, umożliwiając im logowanie się za pomocą dowolnego z nich.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
Tego samego wzorca można użyć z
ReauthenticateWithProvider
, którego można użyć do pobrania nowych poświadczeń dla poufnych operacji wymagających niedawnego logowania.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);
Twoja aplikacja może wtedy poczekać lub zarejestrować oddzwonienie w Future .
Następne kroki
Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i powiązane 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ęść Twojego projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w Twoim projekcie, niezależnie od tego, w jaki sposób użytkownik się loguje.
W Twoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z
firebase::auth::User
object: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 bezpieczeństwa bazy danych Firebase Realtime i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej
auth
i użyć go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.
Możesz zezwolić użytkownikom na logowanie się do 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();