Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

Microsoft 및 C++를 사용하여 인증

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Firebase SDK를 사용하여 웹 기반 일반 OAuth 로그인을 앱에 통합하여 종단 간 로그인 흐름을 수행함으로써 사용자가 Microsoft Azure Active Directory와 같은 OAuth 공급자를 사용하여 Firebase에 인증하도록 할 수 있습니다. 이 흐름에는 전화 기반 Firebase SDK를 사용해야 하므로 Android 및 Apple 플랫폼에서만 지원됩니다.

시작하기 전에

  1. C++ 프로젝트에 Firebase를 추가합니다 .
  2. Firebase 콘솔 에서 인증 섹션을 엽니다.
  3. 로그인 방법 탭에서 Microsoft 공급자를 활성화합니다.
  4. 해당 공급자의 개발자 콘솔에서 공급자 구성에 클라이언트 ID클라이언트 암호 를 추가합니다.
    1. Microsoft OAuth 클라이언트를 등록하려면 빠른 시작: Azure Active Directory v2.0 끝점에 앱 등록 의 지침을 따르세요. 이 끝점은 Microsoft 개인 계정과 Azure Active Directory 계정을 사용한 로그인을 지원합니다. Azure Active Directory v2.0에 대해 자세히 알아보세요 .
    2. 이러한 제공업체에 앱을 등록할 때 프로젝트의 *.firebaseapp.com 도메인을 앱의 리디렉션 도메인으로 등록해야 합니다.
  5. 저장 을 클릭합니다.

firebase::auth::Auth 클래스에 액세스

Auth 클래스는 모든 API 호출의 게이트웨이입니다.
  1. 인증 및 앱 헤더 파일 추가:
    #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::App 에 대한 firebase::auth::Auth 클래스를 가져옵니다. AppAuth 간에 일대일 매핑이 있습니다.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Firebase SDK로 로그인 흐름 처리

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가 지원하는 매개변수는 Microsoft OAuth 문서 를 참조하십시오. setCustomParameters() 를 사용하여 Firebase 필수 매개변수를 전달할 수 없습니다. 이러한 매개변수는 client_id , response_type , redirect_uri , state , scoperesponse_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 작업과 달리 사용자가 자격 증명을 입력할 수 있는 웹 보기를 표시하여 UI를 제어합니다.

    로그인 흐름을 시작하려면 signInWithProvider 를 호출하십시오.

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

    그러면 애플리케이션이 Future 에서 콜백을 기다리거나 등록 할 수 있습니다.

    OAuth 액세스 토큰을 사용하여 Microsoft Graph API 를 호출할 수 있습니다.

    Firebase Auth에서 지원하는 다른 공급자와 달리 Microsoft는 사진 URL을 제공하지 않으며 대신 프로필 사진의 바이너리 데이터를 Microsoft Graph API 를 통해 요청해야 합니다.

  6. 위의 예는 로그인 흐름에 중점을 두고 있지만 LinkWithProvider 를 사용하여 Microsoft Azure Active Directory 공급자를 기존 사용자에 연결할 수도 있습니다. 예를 들어 여러 공급자를 동일한 사용자에게 연결하여 둘 중 하나로 로그인하도록 할 수 있습니다.

    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();
    }
    
  • Firebase 실시간 데이터베이스 및 Cloud Storage 보안 규칙 에서 auth 변수에서 로그인한 사용자의 고유 사용자 ID를 가져와 사용자가 액세스할 수 있는 데이터를 제어하는 ​​데 사용할 수 있습니다.

인증 공급자 자격 증명을 기존 사용자 계정에 연결하여 사용자가 여러 인증 공급자를 사용하여 앱에 로그인하도록 허용할 수 있습니다.

사용자를 로그아웃하려면 SignOut() 을 호출합니다.

auth->SignOut();