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

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

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

قبل البدء

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

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

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

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

  2. في حال عدم الترقية إلى Firebase Authentication with Identity Platform، يُرجى إجراء ذلك. تتم مصادقة SAML فقط متاحة في المشروعات التي تمت ترقيتها.

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

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

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

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

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

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

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

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