Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

MicrosoftとC ++を使用して認証する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Firebase SDKを使用してWebベースの汎用OAuthログインをアプリに統合し、エンドツーエンドのサインインフローを実行することで、Microsoft Azure ActiveDirectoryなどのOAuthプロバイダーを使用してユーザーにFirebaseで認証を許可できます。このフローでは電話ベースのFirebaseSDKを使用する必要があるため、AndroidおよびAppleプラットフォームでのみサポートされます。

あなたが始める前に

  1. C ++プロジェクトにFirebaseを追加します
  2. Firebaseコンソールで、[認証]セクションを開きます。
  3. [サインイン方法]タブで、 Microsoftプロバイダーを有効にします。
  4. そのプロバイダーの開発者コンソールからプロバイダー構成にクライアントIDクライアントシークレットを追加します。
    1. Microsoft OAuthクライアントを登録するには、クイックスタートの手順に従います。AzureActiveDirectoryv2.0エンドポイントにアプリを登録します。このエンドポイントは、Microsoftの個人アカウントとAzure ActiveDirectoryアカウントを使用したサインインをサポートしていることに注意してください。 Azure Active Directoryv2.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::Appfirebase::auth::Authクラスを取得します。 AppAuthの間には1対1のマッピングがあります。
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

FirebaseSDKを使用してログインフローを処理する

Firebase SDKでサインインフローを処理するには、次の手順に従います。

  1. Microsoftに適したプロバイダーIDで構成されたFederatedOAuthProviderDataのインスタンスを作成します。

    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がサポートするパラメータについては、 MicrosoftOAuthのドキュメントを参照してください。 setCustomParameters()を使用してFirebaseに必要なパラメータを渡すことはできないことに注意してください。これらのパラメーターは、 client_idresponse_typeredirect_uristatescope 、およびresponse_modeです。

    特定のAzureADテナントのユーザーのみがアプリケーションにサインインできるようにするには、AzureADテナントのフレンドリドメイン名またはテナントの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. オプション:認証プロバイダーに要求する基本プロファイル以外の追加のOAuth2.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. Authプロバイダーオブジェクトを使用してFirebaseで認証します。他のFirebaseAuth操作とは異なり、これはユーザーが自分の資格情報を入力できるWebビューをポップアップすることによってUIを制御することに注意してください。

    サインインフローを開始するには、 signInWithProviderを呼び出します。

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

    その後、アプリケーションは、Futureでコールバックを待機または登録できます

    OAuthアクセストークンを使用して、 Microsoft GraphAPIを呼び出すことができます。

    Firebase Authでサポートされている他のプロバイダーとは異なり、Microsoftは写真のURLを提供していません。代わりに、プロフィール写真のバイナリデータをMicrosoft GraphAPIを介してリクエストする必要があります。

  6. 上記の例はサインインフローに焦点を当てていますが、 LinkWithProviderを使用してMicrosoft Azure ActiveDirectoryプロバイダーを既存のユーザーにリンクすることもできます。たとえば、複数のプロバイダーを同じユーザーにリンクして、どちらかでサインインできるようにすることができます。

    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* 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();
    }
    
  • FirebaseRealtimeデータベースとCloudStorageのセキュリティルールでは、ログインしたユーザーの一意のユーザーIDをauth変数から取得し、それを使用してユーザーがアクセスできるデータを制御できます。

認証プロバイダーのクレデンシャルを既存のユーザーアカウントにリンクすることで、ユーザーが複数の認証プロバイダーを使用してアプリにサインインできるようにすることができます。

ユーザーをサインアウトするには、 SignOut()を呼び出します。

auth->SignOut();