Firebase SDK를 사용하여 웹 기반 일반 OAuth 로그인을 앱에 통합하여 종단 간 로그인 흐름을 수행함으로써 사용자가 Microsoft Azure Active Directory와 같은 OAuth 공급자를 사용하여 Firebase에 인증하도록 할 수 있습니다. 이 흐름에는 전화 기반 Firebase SDK를 사용해야 하므로 Android 및 Apple 플랫폼에서만 지원됩니다.
시작하기 전에
- C++ 프로젝트에 Firebase를 추가합니다 .
- Firebase 콘솔 에서 인증 섹션을 엽니다.
- 로그인 방법 탭에서 Microsoft 공급자를 활성화합니다.
- 해당 공급자의 개발자 콘솔에서 공급자 구성에 클라이언트 ID 및 클라이언트 암호 를 추가합니다.
- Microsoft OAuth 클라이언트를 등록하려면 빠른 시작: Azure Active Directory v2.0 끝점에 앱 등록 의 지침을 따르세요. 이 끝점은 Microsoft 개인 계정과 Azure Active Directory 계정을 사용한 로그인을 지원합니다. Azure Active Directory v2.0에 대해 자세히 알아보세요 .
- 이러한 제공업체에 앱을 등록할 때 프로젝트의
*.firebaseapp.com
도메인을 앱의 리디렉션 도메인으로 등록해야 합니다.
- 저장 을 클릭합니다.
firebase::auth::Auth
클래스에 액세스
Auth
클래스는 모든 API 호출의 게이트웨이입니다.- 인증 및 앱 헤더 파일 추가:
#include "firebase/app.h" #include "firebase/auth.h"
- 초기화 코드에서
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__)
-
firebase::App
에 대한firebase::auth::Auth
클래스를 가져옵니다.App
과Auth
간에 일대일 매핑이 있습니다.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Firebase SDK로 로그인 흐름 처리
Firebase SDK로 로그인 흐름을 처리하려면 다음 단계를 따르세요.
Microsoft에 적합한 공급자 ID로 구성된
FederatedOAuthProviderData
의 인스턴스를 구성합니다.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
선택 사항 : 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 , 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";
선택 사항 : 인증 제공자에게 요청하고자 하는 기본 프로필 외에 추가 OAuth 2.0 범위를 지정합니다.
provider_data.scopes.push_back("mail.read"); provider_data.scopes.push_back("calendars.read");
자세한 내용은 Microsoft 권한 및 동의 문서 를 참조하세요.
공급자 데이터가 구성되면 이를 사용하여 FederatedOAuthProvider를 생성합니다.
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
인증 제공자 객체를 사용하여 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 를 통해 요청해야 합니다.
위의 예는 로그인 흐름에 중점을 두고 있지만
LinkWithProvider
를 사용하여 Microsoft Azure Active Directory 공급자를 기존 사용자에 연결할 수도 있습니다. 예를 들어 여러 공급자를 동일한 사용자에게 연결하여 둘 중 하나로 로그인하도록 할 수 있습니다.firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
최근 로그인이 필요한 민감한 작업에 대한 새로운 자격 증명을 검색하는 데 사용할 수 있는
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();