Microsoft ve C++ Kullanarak Kimlik Doğrula

Uçtan uca oturum açma akışını gerçekleştirmek için Firebase SDK'sını kullanarak web tabanlı genel OAuth girişini uygulamanıza entegre ederek kullanıcılarınızın Microsoft Azure Active Directory gibi OAuth sağlayıcılarını kullanarak Firebase ile kimlik doğrulamasına izin verebilirsiniz. Bu akış, telefona dayalı Firebase SDK'larının kullanılmasını gerektirdiğinden yalnızca Android ve Apple platformlarında desteklenir.

Başlamadan önce

  1. Firebase'i C++ projenize ekleyin.
  2. Firebase konsolunda Güvenlik > Kimlik doğrulama'ya gidin.
  3. Oturum açma yöntemi sekmesinde Microsoft oturum açma sağlayıcısını etkinleştirin.
  4. İlgili sağlayıcının geliştirici konsolundan istemci kimliğini ve istemci gizli anahtarını sağlayıcı yapılandırmasına ekleyin:
    1. Microsoft OAuth istemcisini kaydetmek için Quickstart: Register an app with the Azure Active Directory v2.0 endpoint (Hızlı Başlangıç: Azure Active Directory v2.0 uç noktasına uygulama kaydetme) başlıklı makaledeki talimatları uygulayın. Bu uç noktanın, Microsoft kişisel hesapları ve Azure Active Directory hesapları kullanılarak oturum açmayı desteklediğini unutmayın. Azure Active Directory 2.0 sürümü hakkında daha fazla bilgi edinin.
    2. Uygulamaları bu sağlayıcılara kaydederken projenizin *.firebaseapp.com alanını, uygulamanızın yönlendirme alanı olarak kaydettiğinizden emin olun.
  5. Kaydet'i tıklayın.

firebase::auth::Auth sınıfına erişme

Auth sınıfı, tüm API çağrıları için ağ geçididir.
  1. Auth ve App üstbilgi dosyalarını ekleyin:
    #include "firebase/app.h"
    #include "firebase/auth.h"
  2. Başlatma kodunuzda bir firebase::App sınıfı oluşturun.
    #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::auth::Auth sınıfını firebase::App için edinin. App ile Auth arasında bire bir eşleme vardır.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);

Firebase SDK ile oturum açma akışını yönetme

Oturum açma akışını Firebase SDK ile işlemek için aşağıdaki adımları uygulayın:

  1. Microsoft için uygun sağlayıcı kimliğiyle yapılandırılmış bir FederatedOAuthProviderData örneği oluşturun.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. İsteğe bağlı: OAuth isteğiyle göndermek istediğiniz ek özel OAuth parametrelerini belirtin.

    // 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'un desteklediği parametreler için Microsoft OAuth dokümanlarına bakın. Firebase'in gerektirdiği parametreleri setCustomParameters() ile iletemeyeceğinizi unutmayın. Bu parametreler client_id, response_type, redirect_uri, state, scope ve response_mode'dur.

    Uygulamada oturum açmak için yalnızca belirli bir Azure AD kiracısındaki kullanıcıların kullanmasına izin vermek istiyorsanız Azure AD kiracısının kolay alan adı veya kiracının GUID tanımlayıcısı kullanılabilir. Bu işlem, özel parametreler nesnesinde "kiracı" alanı belirtilerek yapılabilir.

    // 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. İsteğe bağlı: Kimlik doğrulama sağlayıcıdan istemek istediğiniz temel profilin ötesindeki ek OAuth 2.0 kapsamlarını belirtin.

    provider_data.scopes.push_back("mail.read");
    provider_data.scopes.push_back("calendars.read");
    

    Daha fazla bilgi edinmek için Microsoft izinleri ve rıza belgelerine bakın.

  4. Sağlayıcı verileriniz yapılandırıldıktan sonra bu verileri kullanarak FederatedOAuthProvider oluşturun.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Auth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulama. Diğer FirebaseAuth işlemlerinden farklı olarak bu işlemin, kullanıcının kimlik bilgilerini girebileceği bir web görünümü açarak kullanıcı arayüzünüzün kontrolünü ele geçireceğini unutmayın.

    Oturum açma akışını başlatmak için SignInWithProvider işlevini çağırın:

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

    Başvurunuz bekletilebilir veya Future'da geri arama kaydı oluşturulabilir.

    OAuth erişim jetonunu kullanarak Microsoft Graph API'yi çağırabilirsiniz.

    Firebase Auth tarafından desteklenen diğer sağlayıcıların aksine Microsoft, fotoğraf URL'si sağlamaz. Bunun yerine, profil fotoğrafı için ikili verilerin Microsoft Graph API üzerinden istenmesi gerekir.

  6. Yukarıdaki örnekler oturum açma akışlarına odaklanırken LinkWithProvider kullanarak Microsoft Azure Active Directory sağlayıcısını mevcut bir kullanıcıya bağlama olanağına da sahipsiniz. Örneğin, aynı kullanıcıya birden fazla sağlayıcı bağlayarak kullanıcının her ikisiyle de oturum açmasına izin verebilirsiniz.

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. Aynı kalıp, son giriş gerektiren hassas işlemler için yeni kimlik bilgilerini almak üzere kullanılabilen ReauthenticateWithProvider ile de kullanılabilir.

    firebase::Future<firebase::auth::AuthResult> result =
      user.ReauthenticateWithProvider(provider_data);
    

    Uygulamanız daha sonra bekleyebilir veya Future'da geri arama kaydı oluşturabilir.

Sonraki adımlar

Bir kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgilerine (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.

  • Uygulamalarınızda, kullanıcının temel profil bilgilerini firebase::auth::User nesnesinden alabilirsiniz:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      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 Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için bu kimliği kullanabilirsiniz.

Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.

Bir kullanıcının oturumunu kapatmak için SignOut() numaralı telefonu arayın:

auth->SignOut();