אימות באמצעות 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. בדף Sign-in providers במסוף Firebase, לוחצים על Add new provider ואז על SAML.

  4. נותנים שם לספק. שימו לב למזהה הספק שנוצר: saml.example-provider. תצטרכו את המזהה הזה כשתוסיפו לאפליקציה קוד כניסה.

  5. מציינים את מזהה הישות, את כתובת ה-URL של ה-SSO ואת אישור המפתח הציבורי של ספק הזהויות. צריך לציין גם את מזהה הישות של האפליקציה (ספק השירות). הערכים האלה חייבים להיות זהים לערכים שהספק הקצה לכם.

  6. שומרים את השינויים.

  7. אם עדיין לא הענקת הרשאה לדומיין של האפליקציה, עליך להוסיף אותו לרשימת ההיתרים בדף Authentication > Settings במסוף Firebase.

איך מבצעים את תהליך הכניסה באמצעות Firebase SDK

כדי לטפל בתהליך הכניסה באמצעות Firebase JavaScript SDK:

  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 של טענת הנכונות (assertion) של 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(), שיכולים להיות משמש לאחזור פרטי כניסה חדשים לפעולות רגישות שמצריכות ההתחברות האחרונה.