Firebase SDK를 사용하여 웹 기반 일반 OAuth 로그인을 앱에 통합하여 종단 간 로그인 흐름을 수행함으로써 사용자가 Microsoft Azure Active Directory와 같은 OAuth 공급자를 사용하여 Firebase에 인증하도록 할 수 있습니다. 이 흐름에는 전화 기반 Firebase SDK를 사용해야 하므로 Android 및 Apple 플랫폼에서만 지원됩니다.
시작하기 전에
Firebase 인증 을 사용하려면 먼저 다음을 수행해야 합니다.
Unity 프로젝트를 등록하고 Firebase를 사용하도록 구성합니다.
Unity 프로젝트에서 이미 Firebase를 사용하고 있다면 이미 Firebase용으로 등록 및 구성되어 있는 것입니다.
Unity 프로젝트가 없는 경우 샘플 앱 을 다운로드할 수 있습니다.
Firebase Unity SDK (특히
FirebaseAuth.unitypackage
)를 Unity 프로젝트에 추가합니다.
Unity 프로젝트에 Firebase를 추가하려면 Firebase 콘솔 과 열려 있는 Unity 프로젝트 모두의 작업이 필요합니다(예: 콘솔에서 Firebase 구성 파일을 다운로드한 다음 Unity 프로젝트로 이동).
Firebase.Auth.FirebaseAuth
클래스에 액세스
FirebaseAuth
클래스는 모든 API 호출을 위한 게이트웨이입니다. FirebaseAuth.DefaultInstance 를 통해 액세스할 수 있습니다.Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Firebase SDK로 로그인 흐름 처리
Firebase SDK로 로그인 흐름을 처리하려면 다음 단계를 따르세요.
Microsoft에 적합한 공급자 ID로 구성된
FederatedOAuthProviderData
의 인스턴스를 구성합니다.Firebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = Firebase.Auth.MicrosoftAuthProvider.ProviderId;
선택 사항 : OAuth 요청과 함께 보낼 추가 사용자 지정 OAuth 매개변수를 지정합니다.
providerData.CustomParameters = new Dictionary<string,string>; // Prompt user to re-authenticate to Microsoft. providerData.CustomParameters.Add("prompt", "login"); // Target specific email with login hint. providerData.CustomParameters.Add("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". providerData.CustomParameters.Add("tenant", "TENANT_ID");
선택 사항 : 인증 제공자에게 요청하고자 하는 기본 프로필 외에 추가 OAuth 2.0 범위를 지정합니다.
providerData.Scopes = new List<string>(); providerData.Scopes.Add("mail.read"); providerData.Scopes.Add("calendars.read");
자세한 내용은 Microsoft 권한 및 동의 문서 를 참조하세요.
공급자 데이터가 구성되면 이를 사용하여 FederatedOAuthProvider를 생성합니다.
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);
인증 제공자 객체를 사용하여 Firebase에 인증합니다. 다른 FirebaseAuth 작업과 달리 사용자가 자격 증명을 입력할 수 있는 웹 보기를 표시하여 UI를 제어합니다.
로그인 흐름을 시작하려면
SignInWithProviderAsync
를 호출합니다.auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.SignInResult signInResult = task.Result; Firebase.Auth.FirebaseUser user = signInResult.User; Debug.LogFormat("User signed in successfully: {0} ({1})", user.DisplayName, user.UserId); });
OAuth 액세스 토큰을 사용하여 Microsoft Graph API 를 호출할 수 있습니다.
Firebase Auth에서 지원하는 다른 공급자와 달리 Microsoft는 사진 URL을 제공하지 않으며 대신 프로필 사진의 바이너리 데이터를 Microsoft Graph API 를 통해 요청해야 합니다.
위의 예는 로그인 흐름에 중점을 두고 있지만
LinkWithProviderAsync
를 사용하여 Microsoft Azure Active Directory 공급자를 기존 사용자에 연결할 수도 있습니다. 예를 들어 여러 공급자를 동일한 사용자에게 연결하여 둘 중 하나로 로그인하도록 할 수 있습니다.user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("LinkWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.SignInResult signInResult = task.Result; Firebase.Auth.FirebaseUser user = signInResult.User; Debug.LogFormat("User linked successfully: {0} ({1})", user.DisplayName, user.UserId); });
ReauthenticateWithProviderAsync
와 동일한 패턴을 사용할 수 있으며, 이는 최근 로그인이 필요한 민감한 작업에 대한 새로운 자격 증명을 검색하는 데 사용할 수 있습니다.user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("ReauthenticateWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError( "ReauthenticateWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.SignInResult signInResult = task.Result; Firebase.Auth.FirebaseUser user = signInResult.User; Debug.LogFormat("User reauthenticated successfully: {0} ({1})", user.DisplayName, user.UserId); });
다음 단계
사용자가 처음으로 로그인하면 새 사용자 계정이 생성되어 사용자가 로그인한 자격 증명(즉, 사용자 이름 및 암호, 전화 번호 또는 인증 공급자 정보)에 연결됩니다. 이 새 계정은 Firebase 프로젝트의 일부로 저장되며 사용자 로그인 방식에 관계없이 프로젝트의 모든 앱에서 사용자를 식별하는 데 사용할 수 있습니다.
앱에서
Firebase.Auth.FirebaseUser
객체에서 사용자의 기본 프로필 정보를 가져올 수 있습니다.Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { string name = user.DisplayName; string email = user.Email; System.Uri photo_url = user.PhotoUrl; // 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 User.TokenAsync() instead. string uid = user.UserId; }
Firebase 실시간 데이터베이스 및 Cloud Storage 보안 규칙 에서
auth
변수에서 로그인한 사용자의 고유 사용자 ID를 가져와 사용자가 액세스할 수 있는 데이터를 제어하는 데 사용할 수 있습니다.
인증 공급자 자격 증명을 기존 사용자 계정에 연결하여 사용자가 여러 인증 공급자를 사용하여 앱에 로그인하도록 허용할 수 있습니다.
사용자를 로그아웃하려면 SignOut()
을 호출하십시오.
auth.SignOut();