Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

المصادقة باستخدام Microsoft على Android

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

يمكنك السماح للمستخدمين بالمصادقة مع Firebase باستخدام موفري OAuth مثل Microsoft Azure Active Directory من خلال دمج تسجيل دخول OAuth العام المستند إلى الويب في تطبيقك باستخدام Firebase SDK لتنفيذ تدفق تسجيل الدخول من النهاية إلى النهاية.

قبل ان تبدأ

لتسجيل دخول المستخدمين باستخدام حسابات Microsoft (Azure Active Directory وحسابات Microsoft الشخصية) ، يجب أولاً تمكين Microsoft كموفر تسجيل الدخول لمشروع Firebase الخاص بك:

  1. أضف Firebase إلى مشروع Android الخاص بك .

  2. في وحدة تحكم Firebase ، افتح قسم المصادقة .
  3. في علامة التبويب طريقة تسجيل الدخول ، قم بتمكين موفر Microsoft .
  4. أضف معرّف العميل وسر العميل من وحدة تحكم مطوّري الموفر إلى تهيئة الموفر:
    1. لتسجيل عميل Microsoft OAuth ، اتبع الإرشادات الموجودة في Quickstart: قم بتسجيل تطبيق باستخدام نقطة نهاية Azure Active Directory v2.0 . لاحظ أن نقطة النهاية هذه تدعم تسجيل الدخول باستخدام حسابات Microsoft الشخصية وكذلك حسابات Azure Active Directory. تعرف على المزيد حول Azure Active Directory v2.0.
    2. عند تسجيل التطبيقات مع هؤلاء الموفرين ، تأكد من تسجيل المجال *.firebaseapp.com لمشروعك باعتباره مجال إعادة التوجيه لتطبيقك.
  5. انقر فوق حفظ .
  6. إذا لم تكن قد حددت بصمة SHA-1 لتطبيقك ، فقم بذلك من صفحة الإعدادات في وحدة تحكم Firebase. راجع مصادقة عميلك للحصول على تفاصيل حول كيفية الحصول على بصمة SHA-1 لتطبيقك.

تعامل مع تدفق تسجيل الدخول باستخدام Firebase SDK

إذا كنت تقوم بإنشاء تطبيق Android ، فإن أسهل طريقة لمصادقة المستخدمين باستخدام Firebase باستخدام حسابات Microsoft الخاصة بهم هي التعامل مع تدفق تسجيل الدخول بالكامل باستخدام Firebase Android SDK.

للتعامل مع تدفق تسجيل الدخول باستخدام Firebase Android SDK ، اتبع الخطوات التالية:

  1. أنشئ مثيلاً لـ OAuthProvider باستخدام Builder الخاص به مع معرف الموفر microsoft.com .

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("microsoft.com");
    
  2. اختياري : حدد معلمات OAuth المخصصة الإضافية التي تريد إرسالها مع طلب OAuth.

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

    للحصول على المعلمات التي تدعمها Microsoft ، راجع وثائق Microsoft OAuth . لاحظ أنه لا يمكنك تمرير معلمات Firebase المطلوبة باستخدام setCustomParameters() . هذه المعلمات هي client_id و response_type و redirect_uri و state و range و response_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".
    provider.addCustomParameter("tenant", "TENANT_ID");
    
  3. اختياري : حدد نطاقات OAuth 2.0 إضافية بخلاف ملف التعريف الأساسي الذي تريد طلبه من موفر المصادقة.

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

    لمعرفة المزيد ، راجع أذونات Microsoft ووثائق الموافقة .

  4. مصادقة مع Firebase باستخدام كائن موفر OAuth. لاحظ أنه على عكس عمليات FirebaseAuth الأخرى ، فإن هذا سيتحكم في واجهة المستخدم الخاصة بك عن طريق ظهور علامة تبويب Chrome المخصصة . نتيجةً لذلك ، لا تشر إلى نشاطك في OnSuccessListener و OnFailureListener اللذين ترفقهما حيث سيتم فصلهما فورًا عند بدء العملية لواجهة المستخدم.

    يجب عليك أولاً التحقق مما إذا كنت قد تلقيت ردًا بالفعل. يؤدي تسجيل الدخول عبر هذه الطريقة إلى وضع نشاطك في الخلفية ، مما يعني أنه يمكن للنظام استعادته أثناء تدفق تسجيل الدخول. للتأكد من عدم قيام المستخدم بالمحاولة مرة أخرى في حالة حدوث ذلك ، يجب عليك التحقق مما إذا كانت النتيجة موجودة بالفعل.

    للتحقق مما إذا كانت هناك نتيجة معلقة ، اتصل 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:
                  // ((OAuthCredential)authResult.getCredential()).getAccessToken().
                  // The OAuth ID token can also be retrieved:
                  // ((OAuthCredential)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.
    }
    

    لبدء تدفق تسجيل الدخول ، اتصل 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.
              }
            });
    

    عند الانتهاء بنجاح ، يمكن استرداد رمز وصول OAuth المرتبط بالموفر من كائن OAuthCredential الذي تم إرجاعه.

    باستخدام رمز وصول OAuth المميز ، يمكنك استدعاء Microsoft Graph API .

    على عكس الموفرين الآخرين المدعومين من Firebase Auth ، لا توفر Microsoft عنوان URL للصورة وبدلاً من ذلك ، يجب طلب البيانات الثنائية لصورة الملف الشخصي عبر Microsoft Graph API .

    بالإضافة إلى رمز وصول OAuth المميز ، يمكن أيضًا استرداد رمز معرف OAuth المميز للمستخدم من كائن OAuthCredential . المطالبة sub في الرمز المميز للمعرف خاصة بالتطبيق ولن تتطابق مع معرف المستخدم الموحد المستخدم بواسطة Firebase Auth ويمكن الوصول إليه عبر user.getProviderData().get(0).getUid() . يجب استخدام حقل مطالبة oid بدلاً من ذلك. عند استخدام مستأجر Azure AD لتسجيل الدخول ، ستكون مطالبة oid مطابقة تامة. ومع ذلك ، بالنسبة للحالة غير المستأجرة ، يكون حقل oid مبطن. بالنسبة للمعرف الاتحادي 4b2eabcdefghijkl ، سيكون الرقم oid على شكل 00000000-0000-0000-4b2e-abcdefghijkl .

  5. بينما تركز الأمثلة أعلاه على تدفقات تسجيل الدخول ، يمكنك أيضًا ربط موفر Microsoft بمستخدم حالي باستخدام startActivityForLinkWithProvider . على سبيل المثال ، يمكنك ربط عدة موفرين لنفس المستخدم مما يسمح لهم بتسجيل الدخول باستخدام أي منهما.

    // 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. يمكن استخدام نفس النمط مع startActivityForReauthenticateWithProvider والذي يمكن استخدامه لاسترداد بيانات اعتماد جديدة للعمليات الحساسة التي تتطلب تسجيل دخول حديثًا.

    // 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.
              }
            });
    

الخطوات التالية

بعد أن يقوم المستخدم بتسجيل الدخول لأول مرة ، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد - أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات موفر المصادقة - المستخدم الذي قام بتسجيل الدخول باستخدام. يتم تخزين هذا الحساب الجديد كجزء من مشروع Firebase الخاص بك ، ويمكن استخدامه لتحديد هوية مستخدم عبر كل تطبيق في مشروعك ، بغض النظر عن كيفية تسجيل المستخدم للدخول.

  • في تطبيقاتك ، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من كائن FirebaseUser . انظر إدارة المستخدمين .

  • في قاعدة بيانات Firebase Realtime وقواعد أمان التخزين السحابي ، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير auth ، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام موفري مصادقة متعددين عن طريق ربط بيانات اعتماد موفر المصادقة بحساب مستخدم حالي.

لتسجيل خروج مستخدم ، signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()