Вы можете позволить своим пользователям аутентифицироваться в Firebase с помощью поставщиков OAuth, таких как Microsoft Azure Active Directory, интегрировав универсальный веб-вход OAuth в свое приложение с помощью Firebase SDK для выполнения сквозного процесса входа. Поскольку этот процесс требует использования пакетов SDK Firebase для телефона, он поддерживается только на платформах Android и Apple.
Прежде чем вы начнете
Прежде чем вы сможете использовать Firebase Authentication , вам необходимо:
Зарегистрируйте свой проект Unity и настройте его для использования Firebase.
Если ваш проект Unity уже использует Firebase, значит, он уже зарегистрирован и настроен для Firebase.
Если у вас нет проекта Unity, вы можете скачать образец приложения .
Добавьте SDK Firebase Unity (в частности,
FirebaseAuth.unitypackage
) в свой проект Unity.
Обратите внимание, что добавление 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 . Обратите внимание, что вы не можете передавать параметры, необходимые для 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". 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, вы можете вызывать API Microsoft Graph .
В отличие от других поставщиков, поддерживаемых 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 и облачного хранилища вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной
auth
и использовать его для управления тем, к каким данным пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с помощью нескольких поставщиков проверки подлинности, связав учетные данные поставщика проверки подлинности с существующей учетной записью пользователя.
Чтобы выйти из системы, вызовите SignOut()
:
auth.SignOut();