אימות באמצעות 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, עוברים אל Security (אבטחה) >‏ Authentication (אימות).

  4. בכרטיסייה Sign-in method, לוחצים על Add new provider ואז על SAML.

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

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

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

  8. אם עדיין לא עשיתם זאת, צריך לתת הרשאה לדומיין של האפליקציה:

    1. במסוף Firebase, עוברים אל Security (אבטחה) > Authentication (אימות) > הכרטיסייה Settings (הגדרות).

    2. בקטע דומיינים מורשים, לוחצים על הוספת דומיין ומוסיפים את הדומיין.

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