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 и C ++

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

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

  1. Добавить Firebase в свой проект C ++ .
  2. В Firebase консоли откройте раздел Auth.
  3. На вкладке Входа в методе, включите поставщик Microsoft.
  4. Добавьте идентификатор клиента и секрет клиента от разработчиков консоли, поставщика к конфигурации поставщика:
    1. Для регистрации клиента Microsoft OAuth, следуйте инструкциям в Quickstart: Регистрация приложения с Azure v2.0 Active Directory конечной точкой . Обратите внимание, что эта конечная точка поддерживает вход с использованием личных учетных записей Microsoft, а также учетных записей Azure Active Directory. Узнайте больше о Azure Active Directory v2.0.
    2. При регистрации приложения с этими поставщиками, обязательно зарегистрировать *.firebaseapp.com домена для вашего проекта в области перенаправления для вашего приложения.
  5. Нажмите кнопку Сохранить.

Доступ к firebase::auth::Auth класс

Auth класс является шлюзом для всех вызовов API.
  1. Добавьте файлы заголовков Auth и App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. В коде инициализации, создать 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__)
    
  3. Приобретать firebase::auth::Auth класс для вашего firebase::App . Существует отображение один к одному между App и Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Управляйте входом с помощью Firebase SDK

Чтобы обработать входной поток с помощью Firebase SDK, выполните следующие действия:

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

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

    provider_data.scopes.push_back("mail.read");
    provider_data.scopes.push_back("calendars.read");
    

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

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

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

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

    firebase::Future<firebase::auth::SignInResult> result =
      auth->SignInWithProvider(provider_data);
    

    Ваше приложение может затем ждать или зарегистрировать обратный вызов на будущее .

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

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

  6. Хотя приведенные выше примеры сосредоточиться на знак в потоках, у вас также есть возможность связывать поставщик Active Directory Microsoft Azure для существующего пользователя с помощью LinkWithProvider . Например, вы можете связать нескольких поставщиков с одним и тем же пользователем, позволяя им входить в систему с любым из них.

    firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
    
  7. Та же модель может быть использована с ReauthenticateWithProvider , которые могут быть использованы для получения свежих учетных данных для чувствительных операций, требующих последней регистрацию.

    firebase::Future<firebase::auth::SignInResult> result =
      user->ReauthenticateWithProvider(provider_data);
    

    Ваше приложение может затем ждать или зарегистрировать обратный вызов на будущее .

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, связанная с учетными данными, то есть с именем пользователя и паролем, номером телефона или информацией о провайдере аутентификации, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении в вашем проекте, независимо от того, как пользователь входит в систему.

  • В приложениях, вы можете получить основную информацию о профиле пользователя из firebase::auth::User объекта:

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      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 Cloud Storage правил безопасности , вы можете получить подписанный в уникальном пользователя идентификатор пользователя из auth переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

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

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

auth->SignOut();