Вы можете позволить своим пользователям аутентифицироваться в Firebase с помощью поставщиков OAuth, таких как Microsoft Azure Active Directory, интегрировав универсальный веб-вход OAuth в свое приложение с помощью Firebase SDK для выполнения сквозного процесса входа. Поскольку этот поток требует использования пакетов SDK Firebase для телефона, он поддерживается только на платформах Android и Apple.
Прежде чем вы начнете
- Добавьте Firebase в свой проект C++ .
- В консоли Firebase откройте раздел Auth .
- На вкладке Способ входа включите поставщика Microsoft .
- Добавьте идентификатор клиента и секрет клиента из консоли разработчика этого провайдера в конфигурацию провайдера:
- Чтобы зарегистрировать клиент Microsoft OAuth, следуйте инструкциям в разделе Краткое руководство. Зарегистрируйте приложение с помощью конечной точки Azure Active Directory версии 2.0 . Обратите внимание, что эта конечная точка поддерживает вход с использованием личных учетных записей Microsoft, а также учетных записей Azure Active Directory. Узнайте больше об Azure Active Directory версии 2.0.
- При регистрации приложений у этих поставщиков обязательно зарегистрируйте домен
*.firebaseapp.com
для своего проекта в качестве домена перенаправления для вашего приложения.
- Нажмите Сохранить .
Доступ к классу firebase::auth::Auth
Класс Auth
является шлюзом для всех вызовов API.- Добавьте файлы заголовков Auth и App:
#include "firebase/app.h" #include "firebase/auth.h"
- В коде инициализации создайте класс
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__)
- Получите класс
firebase::auth::Auth
для вашегоfirebase::App
. МеждуApp
иAuth
существует однозначное соответствие.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Обработка процесса входа с помощью Firebase SDK
Чтобы обработать процесс входа с помощью Firebase SDK, выполните следующие действия:
Создайте экземпляр
FederatedOAuthProviderData
, настроенный с идентификатором поставщика, подходящим для Microsoft.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
Необязательно : укажите дополнительные настраиваемые параметры OAuth, которые вы хотите отправить с запросом 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";
Информацию о поддерживаемых Microsoft параметрах см. в документации Microsoft OAuth . Обратите внимание, что вы не можете передавать параметры, необходимые для Firebase, с помощью
setCustomParameters()
. Это параметры client_id , response_type , redirect_uri , state , scope и response_mode .Чтобы разрешить вход в приложение только пользователям из определенного арендатора Azure AD, можно использовать понятное доменное имя арендатора Azure AD или идентификатор GUID арендатора. Это можно сделать, указав поле «арендатор» в объекте пользовательских параметров.
// 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";
Необязательно : укажите дополнительные области действия OAuth 2.0 помимо базового профиля, которые вы хотите запросить у поставщика проверки подлинности.
provider_data.scopes.push_back("mail.read"); provider_data.scopes.push_back("calendars.read");
Дополнительные сведения см. в документации по разрешениям и согласию Microsoft .
После настройки данных вашего провайдера используйте их для создания
FederatedOAuthProvider
.// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
Выполните аутентификацию в Firebase, используя объект поставщика аутентификации. Обратите внимание, что в отличие от других операций FirebaseAuth, эта операция возьмет на себя управление вашим пользовательским интерфейсом, открыв веб-представление, в котором пользователь может ввести свои учетные данные.
Чтобы запустить процесс входа, вызовите
SignInWithProvider
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);
Затем ваше приложение может ожидать или зарегистрировать обратный вызов на Future .
Используя токен доступа OAuth, вы можете вызывать API Microsoft Graph .
В отличие от других поставщиков, поддерживаемых Firebase Auth, Microsoft не предоставляет URL-адрес фотографии, и вместо этого двоичные данные для фотографии профиля необходимо запрашивать через Microsoft Graph API .
Хотя в приведенных выше примерах основное внимание уделяется потокам входа, у вас также есть возможность связать поставщика Microsoft Azure Active Directory с существующим пользователем с помощью
LinkWithProvider
. Например, вы можете связать нескольких провайдеров с одним и тем же пользователем, позволяя им входить в систему с помощью любого из них.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
Тот же шаблон можно использовать с
ReauthenticateWithProvider
, который можно использовать для получения новых учетных данных для конфиденциальных операций, требующих недавнего входа в систему.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);
Затем ваше приложение может ожидать или зарегистрировать обратный вызов на Future .
Следующие шаги
После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя и связывается с учетными данными, т. е. с именем пользователя и паролем, номером телефона или информацией о поставщике проверки подлинности, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя во всех приложениях вашего проекта, независимо от того, как пользователь входит в систему.
В ваших приложениях вы можете получить основную информацию о профиле пользователя из объекта
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(); }
В правилах безопасности базы данных Firebase Realtime и облачного хранилища вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной
auth
и использовать его для управления тем, к каким данным пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с помощью нескольких поставщиков проверки подлинности, связав учетные данные поставщика проверки подлинности с существующей учетной записью пользователя.
Чтобы выйти из системы, вызовите SignOut()
:
auth->SignOut();