Android'de Microsoft kullanarak kimlik doğrulama

Kullanıcılarınızın aşağıdaki gibi OAuth sağlayıcıları kullanarak Firebase ile kimlik doğrulaması yapmasına izin verebilirsiniz: Web tabanlı genel OAuth Girişi entegrasyonuyla Microsoft Azure Active Directory Uçtan uca oturum açma akışını gerçekleştirmek için Firebase SDK'sını kullanarak uygulamanıza ekleyin.

Başlamadan önce

Microsoft hesaplarını (Azure Active Directory ve kişisel) kullanarak kullanıcıların oturumunu açmak için Microsoft hesaplarıyla oturum açmadıysanız) öncelikle Microsoft'u Firebase projeniz:

  1. Firebase'i Android 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ı:
    1. Microsoft OAuth istemcisi kaydetmek için şu sayfadaki talimatları uygulayın: Hızlı başlangıç kılavuzu: Azure Active Directory v2.0 uç noktasına bir uygulama kaydedin. Bu uç noktanın Azure'un yanı sıra Microsoft kişisel hesapları da kullanarak oturum açmayı desteklediğini unutmayın Active Directory hesapları. Daha fazla bilgi Azure Active Directory 2.0 sürümü hakkında.
    2. Bu sağlayıcılara uygulama kaydederken şunu kaydettiğinizden emin olun: Projenizin *.firebaseapp.com alan adını uygulamasını indirin.
  5. Kaydet'i tıklayın.
  6. Uygulamanızın SHA-1 parmak izini henüz belirtmediyseniz Ayarlar sayfası bölümüne gidin. Referans İstemcinizin Kimliğini Doğrulama uygulamanızın SHA-1 parmak izini nasıl alacağınıza ilişkin ayrıntılar için.

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

Android uygulaması oluşturuyorsanız kullanıcılarınızın kimliğini doğrulamanın en kolay yolu oturum açma işlemini tamamlamak ve Firebase'in Microsoft hesaplarını kullanmasını Firebase Android SDK'sı kullanın.

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

  1. Builder'ı kullanarak OAuthProvider'ın bir örneğini sağlayıcı kimliği: microsoft.com.

    Kotlin+KTX

    val provider = OAuthProvider.newBuilder("microsoft.com")

    Java

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("microsoft.com");

  2. İsteğe bağlı: Eklemek istediğiniz ek özel OAuth parametrelerini belirtin OAuth isteğiyle gönderir.

    Kotlin+KTX

    // Target specific email with login hint.
    // Force re-consent.
    provider.addCustomParameter("prompt", "consent")
    
    // Target specific email with login hint.
    provider.addCustomParameter("login_hint", "user@firstadd.onmicrosoft.com")

    Java

    // Target specific email with login hint.
    // Force re-consent.
    provider.addCustomParameter("prompt", "consent");
    
    // Target specific email with login hint.
    provider.addCustomParameter("login_hint", "user@firstadd.onmicrosoft.com");

    Microsoft'un desteklediği parametreler için Microsoft OAuth dokümanları. Firebase'in gerekli parametrelerini setCustomParameters() Bu parametreler client_id, response_type, redirect_uri, state, scope ve response_mode parametresini kullanabilirsiniz.

    Yalnızca belirli bir Azure AD kiracısındaki kullanıcıların oturum açmasına izin vermek için Azure AD kiracısının kolay alan adını girerek ya da kiracının GUID tanımlayıcısı kullanılabilir. Bu işlem, "kiracı" alanına girmelisiniz.

    Kotlin+KTX

    // 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.addCustomParameter("tenant", "TENANT_ID")

    Java

    // 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.addCustomParameter("tenant", "TENANT_ID");

  3. İsteğe bağlı: Temel profilin ötesinde, ek OAuth 2.0 kapsamlarını belirtin. kimlik doğrulama sağlayıcısından istekte bulunabilirsiniz.

    Kotlin+KTX

    // Request read access to a user's email addresses.
    // This must be preconfigured in the app's API permissions.
    provider.scopes = listOf("mail.read", "calendars.read")

    Java

    // Request read access to a user's email addresses.
    // This must be preconfigured in the app's API permissions.
    List<String> scopes =
            new ArrayList<String>() {
                {
                    add("mail.read");
                    add("calendars.read");
                }
            };
    provider.setScopes(scopes);

    Daha fazla bilgi edinmek için Microsoft izinleri ve izin dokümanları.

  4. OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın. Unutmayın, diğer FirebaseAuth işlemleri gerçekleştirmeden önce, Özel Chrome Sekmesi. Bu nedenle, OnSuccessListener içindeki Etkinliğinize referans vermeyin ve eklediğiniz OnFailureListener, otomatik olarak ayrıldığında işlem kullanıcı arayüzünü başlatır.

    Öncelikle bir yanıt alıp almadığınızı kontrol etmeniz gerekir. Şununla oturum açılıyor: bu yöntem, Etkinliğinizi arka plana getirir. Bu da, sistem tarafından geri çekildi. Projenin yolunda gittiğinden bu durumda kullanıcının tekrar denemesini engellemezseniz, zaten mevcut.

    Bekleyen sonuç olup olmadığını kontrol etmek için getPendingAuthResult numaralı telefonu arayın:

    Kotlin+KTX

    val pendingResultTask = firebaseAuth.pendingAuthResult
    if (pendingResultTask != null) {
        // There's something already here! Finish the sign-in for your user.
        pendingResultTask
            .addOnSuccessListener {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // ((OAuthCredential)authResult.getCredential()).getAccessToken().
                // The OAuth secret can be retrieved by calling:
                // ((OAuthCredential)authResult.getCredential()).getSecret().
            }
            .addOnFailureListener {
                // Handle failure.
            }
    } else {
        // There's no pending result so you need to start the sign-in flow.
        // See below.
    }

    Java

    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
        // There's something already here! Finish the sign-in for your user.
        pendingResultTask
                .addOnSuccessListener(
                        new OnSuccessListener<AuthResult>() {
                            @Override
                            public void onSuccess(AuthResult authResult) {
                                // User is signed in.
                                // IdP data available in
                                // authResult.getAdditionalUserInfo().getProfile().
                                // The OAuth access token can also be retrieved:
                                // ((OAuthCredential)authResult.getCredential()).getAccessToken().
                                // The OAuth secret can be retrieved by calling:
                                // ((OAuthCredential)authResult.getCredential()).getSecret().
                            }
                        })
                .addOnFailureListener(
                        new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                // Handle failure.
                            }
                        });
    } else {
        // There's no pending result so you need to start the sign-in flow.
        // See below.
    }

    Oturum açma akışını başlatmak için startActivityForSignInWithProvider numaralı telefonu arayın:

    Kotlin+KTX

    firebaseAuth
        .startActivityForSignInWithProvider(activity, provider.build())
        .addOnSuccessListener {
            // User is signed in.
            // IdP data available in
            // authResult.getAdditionalUserInfo().getProfile().
            // The OAuth access token can also be retrieved:
            // ((OAuthCredential)authResult.getCredential()).getAccessToken().
            // The OAuth secret can be retrieved by calling:
            // ((OAuthCredential)authResult.getCredential()).getSecret().
        }
        .addOnFailureListener {
            // Handle failure.
        }

    Java

    firebaseAuth
            .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
            .addOnSuccessListener(
                    new OnSuccessListener<AuthResult>() {
                        @Override
                        public void onSuccess(AuthResult authResult) {
                            // User is signed in.
                            // IdP data available in
                            // authResult.getAdditionalUserInfo().getProfile().
                            // The OAuth access token can also be retrieved:
                            // ((OAuthCredential)authResult.getCredential()).getAccessToken().
                            // The OAuth secret can be retrieved by calling:
                            // ((OAuthCredential)authResult.getCredential()).getSecret().
                        }
                    })
            .addOnFailureListener(
                    new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            // Handle failure.
                        }
                    });

    İşlem tamamlandığında, provider, döndürülen OAuthCredential nesnesinden alınabilir.

    OAuth erişim jetonunu kullanarak Microsoft Graph API.

    Firebase Auth tarafından desteklenen diğer sağlayıcılardan farklı olarak, Microsoft fotoğraf URL'si sağlar ve bunun yerine, profil fotoğrafı için ikili verilerde talep edilen e-posta adresi Microsoft Graph API.

    OAuth erişim jetonuna ek olarak, kullanıcının OAuth Kimlik jetonu OAuthCredential nesnesinden de alınabilir. İlgili içeriği oluşturmak için kullanılan Kimlik jetonundaki sub talebi uygulamaya özeldir ve birleşik uygulamayla eşleşmez Firebase Auth tarafından kullanılan ve üzerinden erişilebilen kullanıcı tanımlayıcısı user.getProviderData().get(0).getUid(). oid hak talebi alanı şu şekilde olmalıdır: kullanılır. Oturum açmak için Azure AD kiracısı kullanılırken oid talebi tam olarak aynı olur eşleşmesini sağlar. Ancak kiracı olmayan destek kaydı için oid alanı doldurulur. Birleşik Krallık için 4b2eabcdefghijkl kimliğine sahip olan oid, bir form içerir 00000000-0000-0000-4b2e-abcdefghijkl.

  5. Yukarıdaki örneklerde oturum açma akışlarına odaklanılsa da kullanarak Microsoft sağlayıcısını mevcut bir kullanıcıya bağlama startActivityForLinkWithProvider Örneğin, birden çok sağlayıcıyı aynı kullanıcıya göstererek bu iki sağlayıcıdan ikisiyle de oturum açabilmesini sağlar.

    Kotlin+KTX

    // The user is already signed-in.
    val firebaseUser = firebaseAuth.currentUser!!
    firebaseUser
        .startActivityForLinkWithProvider(activity, provider.build())
        .addOnSuccessListener {
            // Provider credential is linked to the current user.
            // IdP data available in
            // authResult.getAdditionalUserInfo().getProfile().
            // The OAuth access token can also be retrieved:
            // authResult.getCredential().getAccessToken().
            // The OAuth secret can be retrieved by calling:
            // authResult.getCredential().getSecret().
        }
        .addOnFailureListener {
            // Handle failure.
        }

    Java

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
            .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
            .addOnSuccessListener(
                    new OnSuccessListener<AuthResult>() {
                        @Override
                        public void onSuccess(AuthResult authResult) {
                            // Provider credential is linked to the current user.
                            // IdP data available in
                            // authResult.getAdditionalUserInfo().getProfile().
                            // The OAuth access token can also be retrieved:
                            // authResult.getCredential().getAccessToken().
                            // The OAuth secret can be retrieved by calling:
                            // authResult.getCredential().getSecret().
                        }
                    })
            .addOnFailureListener(
                    new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            // Handle failure.
                        }
                    });

  6. Aynı desen aşağıdaki Şu bilgileri almak için kullanılabilir: startActivityForReauthenticateWithProvider Yakın zamanda giriş yapılmasını gerektiren hassas işlemler için yeni kimlik bilgileri.

    Kotlin+KTX

    // The user is already signed-in.
    val firebaseUser = firebaseAuth.currentUser!!
    firebaseUser
        .startActivityForReauthenticateWithProvider(activity, provider.build())
        .addOnSuccessListener {
            // User is re-authenticated with fresh tokens and
            // should be able to perform sensitive operations
            // like account deletion and email or password
            // update.
        }
        .addOnFailureListener {
            // Handle failure.
        }

    Java

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
            .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
            .addOnSuccessListener(
                    new OnSuccessListener<AuthResult>() {
                        @Override
                        public void onSuccess(AuthResult authResult) {
                            // User is re-authenticated with fresh tokens and
                            // should be able to perform sensitive operations
                            // like account deletion and email or password
                            // update.
                        }
                    })
            .addOnFailureListener(
                    new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            // Handle failure.
                        }
                    });

Sonraki adımlar

Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve bilgileri (kullanıcı adı ve şifre, telefon numarası) Numara veya kimlik doğrulama sağlayıcı bilgileri (oturum açan kullanıcı). Bu yeni Firebase projenizin bir parçası olarak saklanır ve aşağıdaki verileri tanımlamak için kullanılabilir: nasıl oturum açarsa açsın, projenizdeki tüm uygulamalarda kullanılır.

  • Uygulamalarınızda, kullanıcıların temel profil bilgilerini şuradan alabilirsiniz: FirebaseUser nesnesini ifade eder. Bkz. Kullanıcıları Yönet.

  • Firebase Realtime Database ve Cloud Storage'ınızda Güvenlik Kuralları'nı kullanarak şunları yapabilirsiniz: auth değişkeninden, oturum açmış kullanıcının benzersiz kullanıcı kimliğini alabilirsiniz. ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanılır.

Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz yetkilendirme sağlayıcısının kimlik bilgilerini hesaba katılmaz.

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

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();