Вы можете разрешить пользователям проходить аутентификацию в Firebase с помощью поставщиков OAuth, таких как Microsoft Azure Active Directory. Для этого интегрируйте в приложение общий веб-интерфейс входа через OAuth, используя Firebase SDK для выполнения всего процесса входа. Поскольку для этого процесса требуется использовать Firebase SDK для телефонов, он поддерживается только на платформах Android и Apple.
Подготовка
Чтобы использовать Firebase Authentication, вам необходимо:
Зарегистрируйте проект Unity и настройте его для использования Firebase.
Если в проекте уже используется Firebase, можете пропустить этот шаг.
Если у вас нет проекта Unity, вы можете скачать пример приложения.
Добавьте в свой проект Unity Firebase Unity SDK (в частности,
FirebaseAuth.unitypackage).
Обратите внимание, что для добавления Firebase в проект Unity нужно выполнить действия как в консоли Firebase, так и в вашем открытом проекте Unity. Например, вам потребуется скачать файлы конфигурации Firebase из консоли, а затем переместить их в проект Unity.
Как получить доступ к курсу Firebase.Auth.FirebaseAuth
Класс FirebaseAuth – это шлюз для всех вызовов API.
Он доступен через FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Как обрабатывать процесс входа с помощью Firebase SDK
Чтобы реализовать процесс входа с помощью Firebase SDK, выполните следующие действия:
Создайте экземпляр
FederatedOAuthProviderData, настроенный с идентификатором поставщика, подходящим для Microsoft.Firebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = Firebase.Auth.MicrosoftAuthProvider.ProviderId;Необязательно. Укажите дополнительные специальные параметры OAuth, которые вы хотите отправить с запросом OAuth.
providerData.CustomParameters = new Dictionary<string,string>; // Prompt user to re-authenticate to Microsoft. providerData.CustomParameters.Add("prompt", "login"); // Target specific email with login hint. providerData.CustomParameters.Add("login_hint", "user@firstadd.onmicrosoft.com");Параметры, поддерживаемые Microsoft, описаны в документации по Microsoft OAuth. Обратите внимание, что с помощью
setCustomParameters()нельзя передавать параметры, обязательные для Firebase. Это параметры client_id, response_type, redirect_uri, state, scope и response_mode.Чтобы разрешить вход в приложение только пользователям определенного клиента Azure AD, можно использовать понятное доменное имя клиента Azure AD или его глобальный уникальный идентификатор. Для этого укажите поле tenant в объекте специальных параметров.
// 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". providerData.CustomParameters.Add("tenant", "TENANT_ID");Необязательно. Укажите дополнительные области действия OAuth 2.0, помимо базового профиля, которые вы хотите запросить у поставщика услуг аутентификации.
providerData.Scopes = new List<string>(); providerData.Scopes.Add("mail.read"); providerData.Scopes.Add("calendars.read");Подробнее о разрешениях и согласии Microsoft…
После того как вы настроите данные поставщика, используйте их, чтобы создать FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);Выполните аутентификацию в Firebase с помощью объекта поставщика аутентификации. Обратите внимание, что в отличие от других операций FirebaseAuth эта операция перехватывает управление интерфейсом, показывая веб-представление, в котором пользователь может ввести свои учетные данные.
Чтобы начать процесс входа, вызовите
SignInAndRetrieveDataWithCredentialAsync:auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User signed in successfully: {0} ({1})", user.DisplayName, user.UserId); });С помощью токена доступа OAuth можно вызвать Microsoft Graph API.
В отличие от других поставщиков, поддерживаемых Firebase Auth, Microsoft не предоставляет URL фотографии. Вместо этого двоичные данные для фотографии профиля необходимо запросить через Microsoft Graph API.
В приведенных выше примерах основное внимание уделяется процессам входа в систему, но вы также можете связать поставщика Microsoft Azure Active Directory с существующим пользователем с помощью
LinkWithProviderAsync. Например, вы можете связать несколько поставщиков с одним пользователем, чтобы он мог входить в систему с помощью любого из них.user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("LinkWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User linked successfully: {0} ({1})", user.DisplayName, user.UserId); });Аналогичный шаблон можно использовать с
ReauthenticateWithProviderAsync, чтобы получать свежие учетные данные для конфиденциальных операций, требующих недавнего входа в систему.user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("ReauthenticateWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError( "ReauthenticateWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User reauthenticated successfully: {0} ({1})", user.DisplayName, user.UserId); });
Дальнейшие действия
После первого входа пользователя создается новый аккаунт, связанный с учетными данными, которые он использовал (именем пользователя и паролем, номером телефона или информацией поставщика услуг аутентификации). Этот новый аккаунт хранится в проекте Firebase и позволяет идентифицировать пользователя во всех приложениях проекта независимо от того, как он вошел в аккаунт.
-
В своих приложениях вы можете получить основную информацию профиля пользователя из объекта
Firebase.Auth.FirebaseUser:Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { string name = user.DisplayName; string email = user.Email; System.Uri photo_url = user.PhotoUrl; // 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 User.TokenAsync() instead. string uid = user.UserId; }
В Firebase Realtime Database и Cloud Storage правилах безопасности можно получить уникальный идентификатор пользователя, выполнившего вход, из переменной
authи использовать его, чтобы контролировать, к каким данным у пользователя есть доступ.
Вы можете разрешить пользователям входить в ваше приложение, используя несколько поставщиков услуг аутентификации, связав учетные данные поставщика услуг аутентификации с существующим аккаунтом пользователя.
Чтобы выйти из аккаунта пользователя, вызовите функцию
SignOut():
auth.SignOut();