Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Проверка подлинности с использованием Microsoft и C ++

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

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

  1. Добавьте Firebase в свой проект C ++ .
  2. В файле build.gradle уровня проекта обязательно build.gradle репозиторий Google Maven как в buildscript и в разделы allprojects .
  3. В консоли Firebase откройте раздел Auth .
  4. На вкладке Метод входа включите поставщика Microsoft .
  5. Добавьте Client ID и Client Secret из консоли разработчика этого провайдера в конфигурацию провайдера:
    1. Чтобы зарегистрировать клиент Microsoft OAuth, следуйте инструкциям в Кратком руководстве: зарегистрируйте приложение в конечной точке Azure Active Directory v2.0 . Обратите внимание, что эта конечная точка поддерживает вход с использованием личных учетных записей Microsoft, а также учетных записей Azure Active Directory. Дополнительные сведения об Azure Active Directory v2.0.
    2. При регистрации приложений у этих поставщиков обязательно зарегистрируйте домен *.firebaseapp.com для своего проекта в качестве домена перенаправления для вашего приложения.
  6. Щелкните Сохранить .

Доступ к классу 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::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 , 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";
    
  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);
    

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

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

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

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

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

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

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

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

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

  • В своих приложениях вы можете получить основную информацию профиля firebase::auth::User объекта 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 Realtime и правилах безопасности облачного хранилища вы можете получить уникальный идентификатор пользователя вошедшего в систему из переменной auth и использовать его для управления данными, к которым пользователь может получить доступ.

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

Чтобы выйти из системы, вызовите SignOut() :

auth->SignOut();