المصادقة باستخدام SAML في تطبيقات الويب

إذا أجريت الترقية إلى مصادقة Firebase باستخدام النظام الأساسي للهوية، يمكنك مصادقة المستخدمين من خلال Firebase باستخدام موفّر هوية SAML الذي تختاره. ويتيح ذلك إمكانية استخدام حل "الدخول الموحّد" (SSO) المستند إلى SAML لتسجيل دخول المستخدمين إلى تطبيق Firebase.

تتوافق مصادقة Firebase فقط مع تدفق SAML الذي بدأه مقدم الخدمة.

قبل البدء

لتسجيل دخول المستخدمين باستخدام موفِّر هوية SAML، عليك أولاً جمع بعض المعلومات من موفِّر الخدمة:

  • رقم تعريف كيان الموفِّر: معرّف موارد منتظم (URI) يُحدِّد موفِّر الهوية.
  • عنوان URL للدخول المُوحَّد (SSO) عبر SAML للموفِّر: عنوان URL لصفحة تسجيل الدخول لموفِّر الهوية.
  • شهادة المفتاح العام للموفِّر: الشهادة المستخدمة للتحقق من الرموز المميزة الموقعة من قبل موفِّر الهوية.
  • رقم تعريف كيان التطبيق: هو معرّف موارد منتظم (URI) يُعرِّف تطبيقك، وهو "مقدِّم الخدمة".

بعد حصولك على المعلومات المذكورة أعلاه، يمكنك تفعيل SAML كموفِّر لتسجيل الدخول إلى مشروع Firebase الخاص بك:

  1. أضِف Firebase إلى مشروع JavaScript.

  2. إذا لم تتم الترقية إلى مصادقة Firebase باستخدام النظام الأساسي للهوية، يُرجى إجراء ذلك. لا تتوفر مصادقة SAML إلا في المشاريع التي تمت ترقيتها.

  3. في صفحة موفِّرو خدمات تسجيل الدخول ضمن "وحدة تحكُّم Firebase"، انقر على إضافة موفِّر جديد، ثم انقر على SAML.

  4. يُرجى تسمية مقدّم الخدمة هذا. دوِّن رقم تعريف موفّر الخدمة الذي يتم إنشاؤه: شيء مثل saml.example-provider. ستحتاج إلى هذا المعرف عند إضافة رمز تسجيل الدخول إلى تطبيقك.

  5. حدِّد رقم تعريف كيان موفِّر الهوية، وعنوان URL للدخول المُوحَّد (SSO)، وشهادة المفتاح العام. حدِّد أيضًا رقم تعريف الكيان لتطبيقك (مقدِّم الخدمة). يجب أن تتطابق هذه القيم تمامًا مع القيم التي عيّنها لك مزوّد الخدمة.

  6. احفظ التغييرات.

  7. إذا لم تكن قد فوّضت نطاق تطبيقك من قبل، يمكنك إضافته إلى قائمة السماح في صفحة المصادقة > الإعدادات بوحدة تحكُّم Firebase.

معالجة عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase

للتعامل مع عملية تسجيل الدخول باستخدام حزمة SDK لـ Firebase JavaScript، اتّبِع الخطوات التالية:

  1. أنشِئ نسخة افتراضية من SAMLAuthProvider باستخدام رقم تعريف الموفّر الذي حصلت عليه في "وحدة تحكُّم Firebase".

    واجهة برمجة التطبيقات Web modular API

    import { SAMLAuthProvider } from "firebase/auth";
    
    const provider = new SAMLAuthProvider('saml.example-provider');
    

    واجهة برمجة التطبيقات لمساحة الاسم على الويب

    var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider');
    ``
    
  1. يمكنك المصادقة مع Firebase باستخدام كائن موفّر SAML.

    يمكنك إعادة توجيه المستخدم إلى صفحة تسجيل الدخول الخاصة بمقدّم الخدمة أو فتح صفحة تسجيل الدخول في نافذة متصفّح منبثقة.

    مسار إعادة التوجيه

    إعادة التوجيه إلى صفحة تسجيل الدخول إلى مقدّم الخدمة من خلال الاتصال على الرقم signInWithRedirect():

    واجهة برمجة التطبيقات Web modular API

    import { getAuth, signInWithRedirect } from "firebase/auth";
    
    const auth = getAuth();
    signInWithRedirect(auth, provider);
    

    واجهة برمجة التطبيقات لمساحة الاسم على الويب

    firebase.auth().signInWithRedirect(provider);
    

    بعد أن يكمل المستخدم عملية تسجيل الدخول ثم يعود إلى تطبيقك، يمكنك الحصول على نتيجة تسجيل الدخول من خلال الاتصال على getRedirectResult().

    واجهة برمجة التطبيقات Web modular API

    import { getAuth, getRedirectResult, SAMLAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    getRedirectResult(auth)
      .then((result) => {
        // User is signed in.
    
        // Provider data available using getAdditionalUserInfo()
      })
      .catch((error) => {
        // Handle error.
      });
    

    واجهة برمجة التطبيقات لمساحة الاسم على الويب

    firebase.auth().getRedirectResult()
      .then((result) => {
        // User is signed in.
    
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim.
      })
      .catch((error) => {
        // Handle error.
      });
    

    مسار النافذة المنبثقة

    واجهة برمجة التطبيقات Web modular API

    import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    signInWithPopup(auth, provider)
      .then((result) => {
        // User is signed in.
    
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim.
      })
      .catch((error) => {
        // Handle error.
      });
    

    واجهة برمجة التطبيقات لمساحة الاسم على الويب

    firebase.auth().signInWithPopup(provider)
      .then((result) => {
        // User is signed in.
    
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim.
      })
      .catch((error) => {
        // Handle error.
      });
    

    يحتوي الرمز المميّز لرقم التعريف والكائن UserInfo على عنوان البريد الإلكتروني للمستخدم فقط إذا تم تقديمه في السمة NameID لتأكيد SAML من موفِّر الهوية:

    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID>
    </Subject>
    
  2. مع أنّ الأمثلة أعلاه تركّز على مسارات تسجيل الدخول، يمكنك استخدام النمط نفسه لربط موفِّر SAML بمستخدم حالي باستخدام linkWithRedirect() وlinkWithPopup()، وإعادة مصادقة المستخدم باستخدام reauthenticateWithRedirect() وreauthenticateWithPopup()، والذي يمكن استخدامه لاسترداد بيانات الاعتماد الجديدة للعمليات الحسّاسة التي تتطلب تسجيل دخول حديث.