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

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

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

قبل ان تبدأ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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() :

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

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

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

    firebase.auth().signInWithRedirect(provider);
    

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

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

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

    التدفق المنبثق

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

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