Catch up on everthing we announced at this year's Firebase Summit. Learn more

Android'de Microsoft Kullanarak Kimlik Doğrulama

Uçtan uca oturum açma akışını gerçekleştirmek için Firebase SDK'yı kullanarak web tabanlı genel OAuth Login'i 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ını sağlayabilirsiniz.

Sen başlamadan önce

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

  1. Android projeye Firebase ekleyin .

  2. In Firebase konsoluna , Auth bölümünü açın.
  3. Yöntem sekmesinde İşaret Üzerine Microsoft sağlayıcı sağlar.
  4. Sağlayıcı yapılandırmasına o sağlayıcının geliştirici konsolundan İstemci Kimliği ve İstemci Sırrı ekleyin:
    1. Bir Microsoft OAuth istemcisi kayıt olmak için yönergeleri izleyin Quickstart: Kayıt Azure Active Directory v2.0 son nokta ile bir uygulama . Bu uç noktanın, Microsoft kişisel hesaplarının yanı sıra Azure Active Directory hesaplarını kullanarak oturum açmayı desteklediğini unutmayın. Daha fazla bilgi Azure Active Directory v2.0 hakkında.
    2. Bu sağlayıcılar ile uygulamaları kaydederken, kayıt emin olun *.firebaseapp.com uygulamanız için yönlendirme alanı olarak projeniz için domain.
  5. Kaydet seçeneğini tıklayın.
  6. Henüz uygulamanızın SHA-1 parmak izini belirtilmemişse varsa, gelen bunu Ayarlar sayfasının Firebase konsolunun. Bakın Sizin Müşteri kimlik denetimi uygulamanızın SHA-1 parmak izini almak için ilgili ayrıntılar için.

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

Bir Android uygulaması oluşturuyorsanız, Microsoft hesaplarını kullanarak kullanıcılarınızın Firebase ile kimliğini doğrulamanın en kolay yolu, tüm oturum açma akışını Firebase Android SDK ile yönetmektir.

Firebase Android SDK ile oturum açma akışını yönetmek için şu adımları izleyin:

  1. Sağlayıcı numarası microsoft.com'un ile Builder kullanarak bir OAuthProvider bir örneğini oluşturmak.

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("microsoft.com");
    
  2. İsteğe bağlı: OAuth isteği ile göndermek istediğiniz ek özel OAuth parametrelerini belirtin.

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

    Parametreler Microsoft desteklerin için bkz Microsoft OAuth belgelerine . Birlikte Firebase-gerekli parametreleri geçemediği Not setCustomParameters() . Bu parametreler client_id, response_type, redirect_uri, eyalet, kapsamı ve response_mode vardır.

    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 etki alanı adı veya kiracının GUID tanımlayıcısı kullanılabilir. Bu, ö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.addCustomParameter("tenant", "TENANT_ID");
    
  3. İsteğe bağlı: doğrulama sağlayıcısından talep istediğiniz ek OAuth temel profil ötesinde 2.0 kapsamlarını belirtme.

    List<String> scopes =
        new ArrayList<String>() {
          {
            add("mail.read");
            add("calendars.read");
          }
        };
    provider.setScopes(scopes);
    

    Daha fazla bilgi için bakınız , Microsoft izinler ve rıza belgeleri .

  4. OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulaması yapın. Diğer FirebaseAuth işlemleri aksine, bu bir haşhaş ederek UI kontrolünü alacağı Not Özel Krom Tab . Sonuç olarak, içinde Aktivite başvuru değil OnSuccessListener ve OnFailureListener Eğer operasyon UI başladığında hemen ayırmak gibi takmak söyledi.

    Önce bir yanıt alıp almadığınızı kontrol etmelisiniz. Bu yöntemle oturum açmak, Aktivitenizi arka plana alır; bu, oturum açma akışı sırasında sistem tarafından geri alınabileceği anlamına gelir. Böyle bir durumda kullanıcının tekrar denemesini engellemek için bir sonucun mevcut olup olmadığını kontrol etmelisiniz.

    Bekleyen bir sonuç olup olmadığını kontrol etmek için, çağrı getPendingAuthResult :

    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:
                  // authResult.getCredential().getAccessToken().
                  // The OAuth ID token can also be retrieved:
                  // authResult.getCredential().getIdToken().
                }
              })
          .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.
    }
    

    Akışındaki işaretini başlatmak için çağrı startActivityForSignInWithProvider :

    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:
                // authResult.getCredential().getAccessToken().
                // The OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    Den başarıyla tamamlayan sağlayıcısı ile bağlantılı belirteç OAuth erişim alınabilir OAuthCredential nesnesi geri döndü.

    OAuth erişim jetonu kullanarak, arayabilecek Microsoft Graph API .

    Firebase Auth tarafından desteklenen diğer sağlayıcıların aksine, Microsoft fotoğraf URL'sini sağlamaz ve bunun yerine, profil fotoğrafı için ikili veri yoluyla talep edilmesi gerekmektedir Microsoft Graph API .

    OAuth erişim belirteci ilave olarak, kullanıcının OAuth İD jetonu da alınabilir OAuthCredential nesne. sub İD belirteci istem uygulamaya özel ve üzerinden Firebase Auth tarafından ve erişilebilir kullanılan birleşik kullanıcı belirtecini eşleşmez user.getProviderData().get(0).getUid() . oid iddia alan yerine kullanılmalıdır. Oturum için Azure AD kiracı kullanırken, oid iddia tam bir eşleşme olacak. Ancak sigara kiracı durumu için, oid alan doldurulur. Bir birleşik kimlik için 4b2eabcdefghijkl , oid bir şekilde sahip olacaktır 00000000-0000-0000-4b2e-abcdefghijkl .

  5. Yukarıdaki örnekler odaklanırken oturum açma akışları, ayrıca kullanarak mevcut kullanıcıya bir Microsoft sağlayıcı bağlama yetkisi vardır startActivityForLinkWithProvider . Örneğin, birden çok sağlayıcıyı aynı kullanıcıya bağlayarak, ikisinden biriyle oturum açmalarına izin verebilirsiniz.

    // 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) {
                // Microsoft 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 ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  6. Aynı desen ile kullanılabilir startActivityForReauthenticateWithProvider son girişi gerektiren hassas operasyonlar için taze kimlik bilgilerini almak için kullanılabilir.

    // 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

Bir kullanıcı ilk kez oturum açtıktan sonra, yeni bir kullanıcı hesabı oluşturulur ve oturum açtığı kullanıcının kimlik bilgileriyle (yani kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcısı 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ığından bağımsız olarak projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.

  • Senin uygulamalarda, gelen kullanıcının temel profil bilgileri alabilirsiniz FirebaseUser nesnesi. Bkz Kullanıcıları Yönetme .

  • Senin Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama yılında Güvenlik Kuralları , alabilirsiniz, kullanıcının benzersiz bir kullanıcı kimliği imzalı auth değişkeni ve hangi verilerin kullanıcı teneke erişimi kontrol etmek için kullanabilirsiniz.

Kullanıcıların birden çok kimlik doğrulama sağlayıcıları kullanarak uygulamada oturum izin verebilir mevcut bir kullanıcı hesabına auth sağlayıcı kimlik bilgilerini birbirine bağlayan.

Bir kullanıcı Oturumu kapatmak için çağrı signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()