Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Аутентификация с помощью Microsoft и Unity

Вы можете позволить своим пользователям аутентифицироваться с помощью Firebase с помощью поставщиков OAuth, таких как Microsoft Azure Active Directory, путем интеграции универсального входа OAuth на основе Интернета в ваше приложение с помощью Firebase SDK для выполнения сквозного потока входа. Поскольку этот поток требует использования телефонных пакетов Firebase SDK, он поддерживается только на платформах Android и iOS.

Прежде чем вы начнете

Перед тем, как можно использовать Firebase аутентификации , вам необходимо:

  • Зарегистрируйте свой проект Unity и настройте его для использования Firebase.

    • Если ваш проект Unity уже использует Firebase, значит, он уже зарегистрирован и настроен для Firebase.

    • Если у Вас нет проекта Unity, вы можете загрузить пример приложения .

  • Добавьте Firebase Unity SDK ( в частности, 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, выполните следующие действия:

  1. Построить экземпляр FederatedOAuthProviderData сконфигурированных с соответствующим поставщиком идентификатора для Microsoft.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.MicrosoftAuthProvider.ProviderId;
    
  2. Необязательно: Укажите дополнительные пользовательские параметры 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, состояние, объем и 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");
    
  3. Необязательно: Укажите дополнительные OAuth 2.0 областей за пределами основного профиля , который вы хотите , чтобы запрос от поставщика проверки подлинности.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("mail.read");
    providerData.Scopes.Add("calendars.read");
    

    Чтобы узнать больше, обратитесь к разрешениям и согласию документации Microsoft .

  4. После настройки данных вашего провайдера используйте их для создания FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Выполните аутентификацию с помощью Firebase, используя объект поставщика аутентификации. Обратите внимание, что в отличие от других операций FirebaseAuth, эта функция будет управлять вашим пользовательским интерфейсом, открывая веб-представление, в котором пользователь может ввести свои учетные данные.

    Для того, чтобы начать знак в потоке, вызовите SignInWithProviderAsync :

    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.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    

    Используя маркер доступа OAuth, вы можете вызвать API Microsoft Graph .

    В отличии от других провайдеров , поддерживаемых Firebase Auth, Microsoft не предоставляет фото URL и вместо двоичных данных для фото в профиле должны быть запрошены с помощью Microsoft Graph API .

  6. Хотя приведенные выше примеры сосредоточиться на знак в потоках, у вас также есть возможность связывать поставщик Active Directory Microsoft Azure для существующего пользователя с помощью 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.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User linked successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. Та же модель может быть использована с 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.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.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 Cloud Storage правил безопасности , вы можете получить подписанный в уникальном пользователя идентификатор пользователя из auth переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

Вы можете позволить пользователям входить в ваше приложение с помощью нескольких поставщиков проверки подлинности с помощью ссылки AUTH учетных данных поставщика к существующему учетной записи пользователя.

Чтобы выйти пользователь, вызовите SignOut() :

auth.SignOut();