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

إذا كنت قد أجريت ترقية إلى Firebase Authentication with Identity Platform، يمكنك مصادقة المستخدمين باستخدام Firebase من خلال موفِّر الهوية عبر SAML الذي تختاره. يتيح ذلك استخدام حل الدخول المُوحَّد (SSO) المستند إلى SAML لتسجيل دخول المستخدمين إلى تطبيقك على Firebase.

لا يتوافق تطبيق Firebase Authentication إلا مع مسار SAML الذي بدأه مقدِّم الخدمة.

قبل البدء

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

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

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

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

  2. إذا لم يسبق لك إجراء ذلك، تأكَّد من ترقية مشروعك إلى Firebase Authentication with Identity Platform. لا تتوفّر المصادقة عبر SAML إلا في المشاريع التي تمت ترقيتها.

  3. في وحدة تحكّم Firebase، انتقِل إلى الأمان > المصادقة.

  4. في علامة التبويب طريقة تسجيل الدخول، انقر على إضافة موفّر جديد، ثم انقر على SAML.

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

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

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

  8. إذا لم يسبق لك ذلك، عليك منح الإذن لنطاق تطبيقك باتّباع الخطوات التالية:

    1. في وحدة تحكّم Firebase، انتقِل إلى علامة التبويب الإعدادات ضمن الأمان > المصادقة.

    2. في قسم النطاقات المعتمَدة، انقر على إضافة نطاق وأضِف نطاقك.

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

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

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

    Web

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

    Web

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

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

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

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

    Web

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

    Web

    firebase.auth().signInWithRedirect(provider);
    

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

    Web

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

    Web

    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

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

    Web

    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()، ويمكن استخدام ذلك لاسترداد بيانات اعتماد جديدة للعمليات الحسّاسة التي تتطلّب تسجيل دخول حديث.