المصادقة باستخدام 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 أوث، اتبع الإرشادات في التشغيل السريع: سجل التطبيق مع أزور V2.0 خدمة Active Directory نقطة النهاية . لاحظ أن نقطة النهاية هذه تدعم تسجيل الدخول باستخدام حسابات Microsoft الشخصية وكذلك حسابات Azure Active Directory. معرفة المزيد حول أزور خدمة 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 باستخدام بانيها مع microsoft.com ID الموفر.

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

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

    لدعم المعلمات Microsoft، راجع وثائق Microsoft أوث . ملاحظة أنه لا يمكنك تمرير المعلمات المطلوبة Firebase مع setCustomParameters() . هذه المعلمات CLIENT_ID، RESPONSE_TYPE، redirect_uri، والدولة، ونطاق 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. اختياري: تحديد نطاقات 2.0 أوث إضافية تتجاوز التعريف الأساسي الذي تريد طلب من مزود المصادقة.

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

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

  4. مصادقة مع Firebase باستخدام كائن موفر OAuth. علما بأن خلافا لعمليات FirebaseAuth أخرى، وهذا سوف السيطرة على واجهة المستخدم الخاص بك عن طريق ظهرت على تبويب كروم مخصص . ونتيجة لذلك، لا مرجع آخر الخاصة بك في 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:
                  // 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.
    }
    

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

    على الانتهاء بنجاح، والحصول أوث رمز المرتبطة مزود يمكن استرجاعها من OAuthCredential الكائن عاد.

    باستخدام رمز وصول أوث، يمكنك استدعاء API مايكروسوفت الرسم البياني .

    وخلافا لغيرها من مقدمي الخدمات التي يدعمها Firebase أصيل، مايكروسوفت لا توفر URL الصور وبدلا من ذلك، البيانات الثنائية للصورة الشخصية لابد من طلب عن طريق مايكروسوفت الرسم البياني API .

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

  5. وبينما تركز الأمثلة المذكورة أعلاه على تدفقات تسجيل الدخول ل، لديك أيضا القدرة على ربط مزود مايكروسوفت لمستخدم موجود باستخدام 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 الحقيقي وسحابة التخزين قواعد الأمن ، يمكنك الحصول على قعت في هوية المستخدم الفريد المستخدم من auth متغير، واستخدامها للسيطرة على ما هي البيانات على وصول ويمكن للمستخدم.

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

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

جافا

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()