אימות באמצעות SAML באפליקציות אינטרנט

אם שדרגת ל-Firebase Authentication with Identity Platform, תוכל לאמת את המשתמשים שלך באמצעות Firebase באמצעות ספק הזהות SAML לפי בחירתך. זה מאפשר להשתמש בפתרון SSO מבוסס SAML שלך כדי להיכנס משתמשים לאפליקציית Firebase שלך.

אימות Firebase תומך רק בזרימת SAML יזומה של ספק השירות.

לפני שאתה מתחיל

כדי להיכנס למשתמשים באמצעות ספק זהות SAML, תחילה עליך לאסוף מידע מהספק:

  • מזהה הישות של הספק : URI המזהה את ספק הזהות.
  • כתובת ה-SAML SSO של הספק : כתובת האתר של דף הכניסה של ספק הזהות.
  • אישור המפתח הציבורי של הספק : האישור המשמש לאימות אסימונים חתומים על ידי ספק הזהות.
  • מזהה הישות של האפליקציה שלך : URI המזהה את האפליקציה שלך, "ספק השירות".

לאחר שיש לך את המידע שלמעלה, הפעל את SAML כספק כניסה לפרויקט Firebase שלך:

  1. הוסף את Firebase לפרויקט JavaScript שלך .

  2. אם לא שדרגת ל-Firebase Authentication with Identity Platform, עשה זאת. אימות SAML זמין רק בפרויקטים משודרגים.

  3. בדף ספקי כניסה של מסוף Firebase, לחץ על הוסף ספק חדש ולאחר מכן לחץ על SAML .

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

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

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

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

טפל בזרימת הכניסה עם Firebase SDK

כדי לטפל בזרימת הכניסה עם Firebase JavaScript SDK, בצע את השלבים הבאים:

  1. צור מופע של SAMLAuthProvider באמצעות מזהה הספק שקיבלת במסוף Firebase.

    API מודולרי אינטרנט

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

    API עם מרחב שמות אינטרנט

    var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider');
    ``
    
  1. בצע אימות עם Firebase באמצעות אובייקט ספק SAML.

    אתה יכול להפנות את המשתמש לדף הכניסה של הספק או לפתוח את דף הכניסה בחלון דפדפן מוקפץ.

    הפניית זרימה

    הפנה מחדש לדף הכניסה של הספק על ידי קריאה ל- signInWithRedirect() :

    API מודולרי אינטרנט

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

    API עם מרחב שמות אינטרנט

    firebase.auth().signInWithRedirect(provider);
    

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

    API מודולרי אינטרנט

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

    API עם מרחב שמות אינטרנט

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

    זרימת פופ אפ

    API מודולרי אינטרנט

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

    API עם מרחב שמות אינטרנט

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