Apple Platforms'da Microsoft Kullanarak Kimlik Doğrula

Uçtan uca oturum açma akışı gerçekleştirmek için Firebase SDK'sı ile 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ı kullanarak Firebase ile kimlik doğrulaması yapmasını sağlayabilirsiniz.

Başlamadan önce

Microsoft hesaplarını (Azure Active Directory ve kişisel Microsoft hesapları) kullanarak kullanıcıların oturumunu açmak için önce Firebase projenizde oturum açma sağlayıcısı olarak Microsoft'u etkinleştirmeniz gerekir:

  1. Firebase'i Apple projenize ekleyin.
  2. Firebase konsolunda Auth bölümünü açın.
  3. Oturum açma yöntemi sekmesinde Microsoft sağlayıcısını etkinleştirin.
  4. Söz konusu sağlayıcının geliştirici konsolundan İstemci Kimliği ve İstemci Gizli Anahtarı'nı sağlayıcı yapılandırmasına ekleyin:
    1. Microsoft OAuth istemcisi kaydetmek için Hızlı başlangıç kılavuzu: Azure Active Directory v2.0 uç noktasına uygulama kaydetme başlıklı makaledeki talimatları uygulayın. Bu uç noktanın, Azure Active Directory hesaplarının yanı sıra Microsoft kişisel hesapları da kullanarak oturum açmayı desteklediğini unutmayın. Azure Active Directory 2.0 sürümü hakkında daha fazla bilgi edinin.
    2. Bu sağlayıcılara uygulama kaydederken projenizin *.firebaseapp.com alanını uygulamanızın yönlendirme alanı olarak kaydettiğinizden emin olun.
  5. Kaydet'i tıklayın.

Oturum açma akışını Firebase SDK'sı ile yönetme

Oturum açma akışını Firebase Apple platformlar SDK'sı ile yönetmek için aşağıdaki adımları uygulayın:

  1. Xcode projenize özel URL şemaları ekleyin:

    1. Proje yapılandırmanızı açın: Sol ağaç görünümünde proje adını çift tıklayın. HEDEFLER bölümünden uygulamanızı seçin, ardından Bilgi sekmesini seçin ve URL Türleri bölümünü genişletin.
    2. + düğmesini tıklayın ve Kodlanmış Uygulama Kimliğinizi URL şeması olarak ekleyin. Kodlanmış Uygulama Kimliğinizi, Firebase konsolunun Genel Ayarlar sayfasının iOS uygulamanızın bölümünde bulabilirsiniz. Diğer alanları boş bırakın.

      Tamamlandığında yapılandırmanız aşağıdakine benzer bir görünümde olacaktır (ancak uygulamaya özel değerlerinizle):

      Xcode'un özel URL şeması kurulum arayüzünün ekran görüntüsü
  2. microsoft.com sağlayıcı kimliğini kullanarak bir OAuthProvider örneği oluşturun.

    Swift

        var provider = OAuthProvider(providerID: "microsoft.com")
        

    Objective-C

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"];
        
  3. İsteğe bağlı: OAuth isteğiyle birlikte göndermek istediğiniz ek özel OAuth parametrelerini belirtin.

    Swift

        provider.customParameters = [
          "prompt": "consent",
          "login_hint": "user@firstadd.onmicrosoft.com"
        ]
        

    Objective-C

        [provider setCustomParameters:@{@"prompt": @"consent", @"login_hint": @"user@firstadd.onmicrosoft.com"}];
        

    Microsoft'un desteklediği parametreler için Microsoft OAuth dokümanlarına bakın. Firebase için gerekli parametreleri setCustomParameters ile iletemeyeceğinizi unutmayın. Bu parametreler client_id, response_type, redirect_uri, state, scope ve response_mode parametreleridir.

    Yalnızca belirli bir Azure AD kiracısındaki kullanıcıların uygulamada oturum açmasına izin vermek için 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ını belirterek yapılabilir.

    Swift

        provider.customParameters = [
          // 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".
          "tenant": "TENANT_ID"
        ]
        

    Objective-C

        // 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.customParameters = @{@"tenant": @"TENANT_ID"};
        
  4. İsteğe bağlı: Kimlik doğrulama sağlayıcısından istemek istediğiniz temel profilin ötesinde ek OAuth 2.0 kapsamları belirtin.

    Swift

        provider.scopes = ["mail.read", "calendars.read"]
        

    Objective-C

        [provider setScopes:@[@"mail.read", @"calendars.read"]];
        

    Daha fazla bilgi edinmek için Microsoft izinleri ve izin belgelerini inceleyin.

  5. İsteğe bağlı: Uygulamanızın, kullanıcılara reCAPTCHA'yı gösterirken SFSafariViewController veya UIWebView sunma şeklini özelleştirmek istiyorsanız AuthUIDelegate protokolüne uygun bir özel sınıf oluşturun ve bunu credentialWithUIDelegate hizmetine iletin.

  6. OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın.

    Swift

        // Replace nil with the custom class that conforms to AuthUIDelegate
        // you created in last step to use a customized web view.
        provider.getCredentialWith(nil) { credential, error in
          if error != nil {
            // Handle error.
          }
          if credential != nil {
            Auth().signIn(with: credential) { authResult, error in
              if error != nil {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
              // OAuth access token can also be retrieved:
              // (authResult.credential as? OAuthCredential)?.accessToken
              // OAuth ID token can also be retrieved:
              // (authResult.credential as? OAuthCredential)?.idToken
            }
          }
        }
        

    Objective-C

        [provider getCredentialWithUIDelegate:nil
                                   completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
          if (error) {
           // Handle error.
          }
          if (credential) {
            [[FIRAuth auth] signInWithCredential:credential
                                      completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) {
              if (error) {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
              // OAuth access token can also be retrieved:
              // ((FIROAuthCredential *)authResult.credential).accessToken
              // OAuth ID token can also be retrieved:
              // ((FIROAuthCredential *)authResult.credential).idToken
            }];
          }
        }];
        

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

    Örneğin, temel profil bilgilerini almak için Authorization başlığındaki erişim jetonunu ileterek REST API'yi çağırabilirsiniz:

    https://graph.microsoft.com/v1.0/me
    

    Firebase Auth tarafından desteklenen diğer sağlayıcıların aksine Microsoft, fotoğraf URL'si sağlamaz. Bunun yerine, bir profil fotoğrafının ikili verilerinin Microsoft Graph API aracılığıyla istenmesi gerekir.

    OAuth erişim jetonuna ek olarak, kullanıcının OAuth kimlik jetonu da OAuthCredential nesnesinden alınabilir. Kimlik jetonundaki sub talebi uygulamaya özeldir ve Firebase Auth tarafından kullanılan ve user.providerData[0].uid üzerinden erişilebilen birleşik kullanıcı tanımlayıcısıyla eşleşmez. Bunun yerine oid hak talebi alanı kullanılmalıdır. Oturum açmak için Azure AD kiracısı kullanılırken oid talebi tam eşleşme olur. Ancak kiracı olmayan destek kaydı için oid alanı doldurulur. Birleşik kimlik 4b2eabcdefghijkl için oid, 00000000-0000-0000-4b2e-abcdefghijkl biçiminde olur.

  7. Yukarıdaki örneklerde oturum açma akışlarına odaklanılsa da siz de linkWithCredential kullanarak Microsoft sağlayıcısını mevcut bir kullanıcıya bağlayabilirsiniz. Örneğin, aynı kullanıcıya birden fazla sağlayıcı bağlayabilir ve bu sağlayıcılardan herhangi biriyle oturum açabilir.

    Swift

        Auth().currentUser.link(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // Microsoft credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // OAuth access token can also be retrieved:
          // (authResult.credential as? OAuthCredential)?.accessToken
          // OAuth ID token can also be retrieved:
          // (authResult.credential as? OAuthCredential)?.idToken
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            linkWithCredential:credential
                    completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // Microsoft credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // OAuth access token can also be retrieved:
          // ((FIROAuthCredential *)authResult.credential).accessToken
          // OAuth ID token can also be retrieved:
          // ((FIROAuthCredential *)authResult.credential).idToken
        }];
        
  8. Aynı kalıp, yakın zamanda giriş yapılmasını gerektiren hassas işlemler için yeni kimlik bilgilerini almak amacıyla reauthenticateWithCredential ile kullanılabilir.

    Swift

        Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token can also be retrieved:
          // (authResult.credential as? OAuthCredential)?.accessToken
          // OAuth ID token can also be retrieved:
          // (authResult.credential as? OAuthCredential)?.idToken
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            reauthenticateWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token can also be retrieved:
          // ((FIROAuthCredential *)authResult.credential).accessToken
          // OAuth ID token can also be retrieved:
          // ((FIROAuthCredential *)authResult.credential).idToken
        }];
        

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ı bilgisi) bağlanır. Bu yeni hesap Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığından bağımsız olarak projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.

  • Uygulamalarınızda kullanıcının temel profil bilgilerini User nesnesinden alabilirsiniz. Kullanıcıları Yönetme başlıklı makaleye göz atın.

  • Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açan 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 kullanabilirsiniz.

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

Bir kullanıcının oturumunu kapatmak için signOut: numaralı telefonu arayın.

Swift

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

Objective-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Kimlik doğrulama hatalarının tamamı için hata işleme kodu eklemek de isteyebilirsiniz. Hataları İşleme bölümüne bakın.