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

Microsoft 및 Unity를 사용하여 인증

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로 로그인 흐름을 처리하려면 다음 단계를 따르세요.

  1. Microsoft에 적합한 공급자 ID로 구성된 FederatedOAuthProviderData 의 인스턴스를 구성합니다.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.MicrosoftAuthProvider.ProviderId;
    
  2. 선택 사항 : 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 , 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".
    providerData.CustomParameters.Add("tenant", "TENANT_ID");
    
  3. 선택 사항 : 인증 제공자에게 요청하고자 하는 기본 프로필 외에 추가 OAuth 2.0 범위를 지정합니다.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("mail.read");
    providerData.Scopes.Add("calendars.read");
    

    자세한 내용은 Microsoft 권한 및 동의 문서 를 참조하세요.

  4. 공급자 데이터가 구성되면 이를 사용하여 FederatedOAuthProvider를 생성합니다.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. 인증 제공자 객체를 사용하여 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 를 통해 요청해야 합니다.

  6. 위의 예는 로그인 흐름에 중점을 두고 있지만 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);
    });
    
  7. 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();