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

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

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

قبل ان تبدأ

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

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

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

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

  2. إذا لم تكن قد قمت بالترقية إلى Firebase Authentication باستخدام Identity Platform ، فافعل ذلك. مصادقة SAML متاحة فقط في المشاريع التي تمت ترقيتها.

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

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

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

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

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

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

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

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

    Web version 9

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

    Web version 8

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

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

    إعادة توجيه التدفق

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

    Web version 9

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

    Web version 8

    firebase.auth().signInWithRedirect(provider);
    

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

    Web version 9

    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 version 8

    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 version 9

    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 version 8

    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.
      });
    
  2. بينما تركز الأمثلة المذكورة أعلاه على تدفقات تسجيل الدخول ، يمكنك استخدام نفس النمط لربط موفر SAML بمستخدم حالي باستخدام linkWithRedirect() و linkWithPopup() ، وإعادة مصادقة المستخدم باستخدام إعادة المصادقة مع إعادة التوجيه () وإعادة المصادقة reauthenticateWithRedirect() reauthenticateWithPopup() ، والتي يمكن استخدامها لاسترداد بيانات اعتماد جديدة للعمليات الحساسة التي تتطلب تسجيل دخول حديثًا.