שילוב של Identity Platform עם reCAPTCHA Enterprise API

במאמר הזה מוסבר איך להשתמש בשילוב של Identity Platform עם reCAPTCHA Enterprise API כדי לשפר את האבטחה של המשתמשים. התכונה הזו משפרת את העמידות של האפליקציה בפני ספאם, ניצול לרעה ופעילות שמקורה בתרמית.

השילוב יוצר בשבילכם הערכה של reCAPTCHA Enterprise כדי לאמת בקשות של משתמשים. למחירון של reCAPTCHA

סקירה כללית

כשמגדירים את השילוב של Identity Platform עם reCAPTCHA Enterprise API, מפעילים את תכונת ההגנה שמוגדרת כברירת מחדל ב-reCAPTCHA – הגנה מפני בוטים של reCAPTCHA. כשמפעילים את ההגנה מפני בוטים, פלטפורמת Identity Platform מקצה בשבילכם בפרויקט מפתחות reCAPTCHA שמבוססים על ניקוד. כשמשתמש ניגש לאפליקציה או לאתר באמצעות אחת מהפעולות הבאות, ה-SDK של הלקוח טוען את reCAPTCHA כשהספק התואם מופעל.

ספק פעולה ‏Method
passwordProvider כניסה באמצעות כתובת אימייל וסיסמה signInWithPassword
הרשמה באמצעות כתובת אימייל וסיסמה signUpPassword
כניסה באמצעות קישור באימייל getOobCode
בוצע איפוס של סיסמה getOobCode
phoneProvider הרשמה או כניסה באמצעות מספר טלפון sendVerificationCode
רישום מספר טלפון לאימות רב-שלבי (MFA) mfaSmsEnrollment
כניסה באמצעות מספר טלפון לאימות רב-שלבי (MFA) mfaSmsSignIn

לאחר מכן, מערכת reCAPTCHA מספקת ל-Identity Platform ניקוד שמעריך את הסיכון של הבקשה על סמך ההגדרות שלכם והיכולת שלכם להתמודד עם סיכונים.

מידע נוסף זמין במאמר סקירה כללית של reCAPTCHA.

לפני שמתחילים

בהתאם לסוג תהליך האימות שאתם רוצים להגן עליו באמצעות reCAPTCHA, ודאו שהגדרתם את הדברים הבאים:

יצירה של חשבון שירות

כדי לשלב את Identity Platform עם reCAPTCHA Enterprise API, צריך חשבון שירות של Identity Platform לכל פרויקט שמשתמש ב-reCAPTCHA. כך Identity Platform יכולה לנהל את מפתחות reCAPTCHA בשבילכם. אם כבר יצרתם חשבון שירות, תנו לו גישה ל-reCAPTCHA.

אם עדיין לא יצרתם חשבון שירות או שיש לכם פרויקטים נוספים שאתם רוצים להגן עליהם באמצעות reCAPTCHA:

  1. משתמשים ב-Google Cloud CLI כדי ליצור חשבון שירות:

    gcloud beta services identity create \
        --service=identitytoolkit.googleapis.com \
        --project=PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

  2. נותנים לחשבון השירות גישה ל-reCAPTCHA:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-identitytoolkit. \
        --role=roles/identitytoolkit.serviceAgent
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט
    • ‫PROJECT_NUMBER: מספר החשבון של הפרויקט

התנהגות ההגנה מפני בוטים של reCAPTCHA לפי ספק

ההתנהגות של ההגנה מפני בוטים של reCAPTCHA תלויה בספק הזהויות שאתם מגדירים:

ספק אימייל וסיסמה

בתהליכי אימות של אימייל וסיסמה, ההגנה מפני בוטים של reCAPTCHA תומכת בשני מצבים: ביקורת ואכיפה.

מצב ביקורת

כשמגדירים את אכיפת האימות באמצעות אימייל וסיסמה למצב ביקורת, פלטפורמת Identity Platform יוצרת בפרויקט מפתח reCAPTCHA אחד או יותר, שמשמשים להערכת התנועה לממשקי ה-API של Identity Platform בלי לחסום בקשות. כדי להחליט אם להפעיל את אכיפת reCAPTCHA, אתם יכולים להשתמש במדדים שנוצרים במהלך מצב הביקורת.

מצב אכיפה

כשמגדירים את אכיפת האימייל והסיסמה למצב אכיפה, Identity Platform יוצרת בפרויקט מפתח reCAPTCHA אחד או יותר, שמשמשים להערכת התנועה לממשקי ה-API של Identity Platform. בקשות API שלא כוללות אסימון reCAPTCHA נדחות. צריך להפעיל את האכיפה רק אחרי שמעבירים את כל הלקוחות ל-SDK עם תמיכה ב-reCAPTCHA.

ספק הטלפון

כשמפעילים הגנה מפני בוטים בתהליכי אימות באמצעות הטלפון, על ידי הגדרת phoneEnforcementState ל-ENFORCE ו-useSmsBotScore ל-true, Identity Platform משתמשת בהגנה מפני בוטים של reCAPTCHA לאימות האפליקציה. אם בקשת המשתמש עוברת את הערכת ההגנה מפני בוטים, נשלח קוד אימות ב-SMS. אם בקשה של משתמש נכשלת בהערכת ההגנה מפני בוטים, Identity Platform חוסמת את הבקשה ולא שולחת הודעת SMS עם קוד אימות.

לא צריך להגדיר אימות חלופי כשמפעילים הגנה מפני בוטים בתהליכי אימות באמצעות הטלפון, וגם לא צריך להגדיר שיטות אימות נוספות לאפליקציה. עם זאת, מומלץ להגדיר את מאמת reCAPTCHA לאפליקציות אינטרנט כדי לוודא ש-reCAPTCHA גרסה 2 זמין אם תחליטו להשבית את ההגנה מפני בוטים.

הגדרת השילוב של Identity Platform עם reCAPTCHA Enterprise API

כדי להגדיר את השילוב של Identity Platform עם reCAPTCHA Enterprise API, צריך לבצע את הפעולות הבאות:

  • משתמשים ב-SDK לאדמינים כדי להגדיר את מצב האכיפה של reCAPTCHA ולהפעיל הגנה מפני בוטים.
  • מגדירים את ה-SDK של הלקוח לפלטפורמה של האפליקציה.

בתהליכי אימות של כתובת אימייל וסיסמה, מומלץ קודם להפעיל את אכיפת reCAPTCHA במצב ביקורת ולעקוב אחרי מדדי reCAPTCHA שהפרויקט מפיק, כדי לא להפריע לתנועת המשתמשים בזמן שמוודאים שתהליכי האימות מוגנים. אחרי שמוודאים שתהליכי האימות מוגנים, מגדירים את ההגנה מפני בוטים לערך ENFORCE. בתהליכי אימות באמצעות הטלפון, מפעילים את ההגנה מפני בוטים על ידי הגדרת phoneEnforcementState ל-ENFORCE ו-useSmsBotScore ל-true, ועוקבים אחרי המדדים של reCAPTCHA כדי לשפר את ספי הניקוד.

הפעלת הגנה מפני בוטים באמצעות reCAPTCHA

ספק אימייל וסיסמה

כדי להפעיל הגנה מפני בוטים באמצעות reCAPTCHA בתהליכי אימות של כתובת אימייל וסיסמה, מבצעים את הפעולות הבאות:

  1. אם עדיין לא עשיתם זאת, הפעילו את reCAPTCHA Enterprise API בפרויקט.

  2. כדי להפעיל הגנה מפני בוטים בפרויקט, משתמשים ב-SDK לאדמינים. התמיכה ב-reCAPTCHA זמינה בגרסאות 11.7.0 ואילך של Node.js SDK לאדמינים.

    לדוגמה:

    // Update project config with reCAPTCHA config
    const updateConfigRequest = {
      recaptchaConfig: {
        emailPasswordEnforcementState:  'ENFORCE_MODE',
        managedRules: [{
          endScore: END_SCORE,
          action: 'BLOCK'
        }]
      }
    };
    const updateProjectConfigWithRecaptcha = () => {
      getAuth().projectConfigManager().updateProjectConfig(updateConfigRequest).then((response) => {
        console.log('Updated reCAPTCHA config for project: ', response.recaptchaConfig);
      }).catch((error) => {
        console.log('Error updating project config:', error);
      });
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫ENFORCE_MODE: המצב שרוצים להגדיר לאכיפת אימות של כתובת אימייל וסיסמה ב-reCAPTCHA. הערכים התקינים הם OFF,‏ AUDIT ו-ENFORCE. כדי להפעיל הגנה מפני בוטים, צריך להגדיר את הפרמטר הזה לערך AUDIT או ENFORCE. כשמפעילים את ההגנה מפני בוטים בפעם הראשונה, מומלץ להגדיר את הפרמטר הזה לערך AUDIT ולוודא שתהליכי האימות מוגנים לפני שמגדירים אותו לערך ENFORCE. למידע נוסף על אופן הפעולה של המצבים, ראו התנהגות ההגנה מפני בוטים של reCAPTCHA לפי ספק.
    • ‫END_SCORE: הציון הנמוך ביותר של הערכת ההגנה מפני בוטים שיכול להיות לבקשה לפני שהיא נכשלת. אפשר להגדיר את הציון הזה בין 0.0 ל-1.0. לדוגמה, אם מגדירים סף של 0.6, מערכת reCAPTCHA תדחה כל בקשה עם ציון של 0.5 או פחות. לכן, ככל שהניקוד שתגדירו יהיה גבוה יותר, כך הכללים יהיו מחמירים יותר.

    אפשר גם להפעיל הגנה מפני בוטים באמצעות אותה שיטת הגדרה לדייר באמצעות SDK לאדמינים. למידע נוסף על עדכון דייר, ראו עדכון דייר.

  3. אם אתם משתמשים ב-Identity Platform ב-iOS או ב-Android, אתם צריכים לרשום את האפליקציה במסוף Firebase:

    אם אתם משתמשים ב-Identity Platform באינטרנט, אתם צריכים להוסיף דומיין מורשה לכל דומיין שמשתמש ב-reCAPTCHA. כדי להוסיף דומיינים מורשים:

    1. במסוף Google Cloud , נכנסים לדף Identity Platform.

      כניסה ל-Identity Platform

    2. עוברים אל הגדרות > אבטחה.

    3. לוחצים על הוספת דומיין.

    4. מזינים את שם הדומיין ולוחצים על הוספה כדי לשמור את הדומיין.

    הקצאת מפתח reCAPTCHA יכולה להימשך כמה דקות.

  4. אם הגדרתם את האכיפה למצב ביקורת, מומלץ לעקוב אחרי המדדים של reCAPTCHA להגנה מפני בוטים כדי לוודא שהתהליכים שלכם מוגנים.

ספק הטלפון

כדי להפעיל את ההגנה של reCAPTCHA מפני בוטים בתהליכי אימות שמבוססים על SMS:

  1. אם עדיין לא עשיתם זאת, הפעילו את reCAPTCHA Enterprise API בפרויקט.

  2. כדי להפעיל הגנה מפני בוטים בפרויקט, משתמשים ב-SDK לאדמינים. התמיכה ב-reCAPTCHA זמינה בגרסאות 12.7.0 ואילך של ה-SDK לאדמינים ב-Node.js.

    לדוגמה:

    // Update project config with reCAPTCHA config
    const updateProjectConfigRequest = {
      recaptchaConfig: {
        phoneEnforcementState: 'ENFORCE',
        managedRules: [{
          endScore: END_SCORE,
          action: 'BLOCK'
        }],
        useSmsBotScore: true,
      }
    };
    let projectConfig = await getAuth().projectConfigManager().updateProject(updateProjectConfigRequest);
    

    מחליפים את END_SCORE בציון ההערכה הנמוך ביותר של הגנה מפני בוטים שיכול להיות לבקשה לפני שהיא נכשלת. אפשר להגדיר את הציון הזה בין 0.0 ל-1.0. לדוגמה, אם מגדירים סף של 0.6, מערכת reCAPTCHA תדחה כל בקשה עם ציון של 0.5 או פחות. לכן, ככל שהניקוד גבוה יותר, הכללים מחמירים יותר.

    הגדרת phoneEnforcementState לערך ENFORCE ו-useSmsBotScore לערך true מפעילה אכיפה של הגנה מפני בוטים בתהליכי אימות שמבוססים על SMS. למידע נוסף על האופן שבו פועלת האכיפה של ספק הטלפון, קראו את המאמר התנהגות ההגנה מפני בוטים של reCAPTCHA לפי ספק.

    אפשר גם להפעיל הגנה מפני בוטים באמצעות אותה שיטת הגדרה לדייר באמצעות SDK לאדמינים. למידע נוסף על עדכון דייר, ראו עדכון דייר.

  3. אם אתם משתמשים ב-Identity Platform ב-iOS או ב-Android, אתם צריכים לרשום את האפליקציה ממסוף Firebase:

    אם אתם משתמשים ב-Identity Platform באינטרנט, אתם צריכים להוסיף דומיין מורשה לכל דומיין שמשתמש ב-reCAPTCHA. כדי להוסיף דומיינים מורשים:

    1. במסוף Google Cloud , נכנסים לדף Identity Platform.

      כניסה ל-Identity Platform

    2. עוברים אל הגדרות > אבטחה.

    3. לוחצים על הוספת דומיין.

    4. מזינים את שם הדומיין ולוחצים על הוספה כדי לשמור את הדומיין.

    הקצאת מפתח reCAPTCHA יכולה להימשך כמה דקות.

  4. כדי לוודא שהתהליכים שלכם מוגנים, עקבו אחרי המדדים של reCAPTCHA להגנה מפני בוטים.

הגדרת ה-SDK של הלקוח

מגדירים את ה-SDK של הלקוח בהתאם לפלטפורמה של האפליקציה.

אינטרנט

  1. מעדכנים לגרסה העדכנית של ה-SDK לאינטרנט.

    • התמיכה של reCAPTCHA באימות באמצעות אימייל וסיסמה באפליקציות אינטרנט זמינה בגרסאות 9.20.0 ואילך של JavaScript SDK.
    • התמיכה של reCAPTCHA באימות באמצעות הטלפון באפליקציות אינטרנט זמינה בגרסאות 11 ואילך של JavaScript SDK.

    אחרי שמשלבים את ה-SDK לאינטרנט באפליקציה, ה-SDK מאחזר באופן אוטומטי את הגדרות reCAPTCHA ומפעיל את ההגנה לספקים שהגדרתם.

  2. במקרה הצורך, אפשר לאלץ אחזור של אות reCAPTCHA באופן הבא:

    import { initializeRecaptchaConfig } from '@firebase/auth';
    
    // Initialize Firebase Authentication
    const auth = getAuth();
    initializeRecaptchaConfig(auth)
      .then(() => {
        console.log("Recaptcha Enterprise Config Initialization successful.")
      })
      .catch((error) => {
        console.error("Recaptcha Enterprise Config Initialization failed with " + error)
      });
    

Android

  1. מעדכנים לגרסה העדכנית של Android SDK. התמיכה של reCAPTCHA באימות באמצעות אימייל וסיסמה ובאימות באמצעות הטלפון באפליקציות ל-Android זמינה ב-Android SDK מגרסה 23.1.0 ואילך.

    בנוסף, כדי להשתמש ב-reCAPTCHA צריך רמת API‏ 23 (Marshmallow) ומעלה ו-Android מגרסה 6 ומעלה.

    אחרי שמשלבים את Android SDK באפליקציה, ה-SDK מאחזר באופן אוטומטי את ההגדרות האישיות של reCAPTCHA ומפעיל את ההגנה לספקים שהגדרתם.

  2. מוסיפים את כלל ה-build הבא לקטע של יחסי התלות בקובץ build.gradle ברמת האפליקציה:

    implementation 'com.google.android.recaptcha:recaptcha:18.5.1'
    

    חשוב להשתמש ב-reCAPTCHA SDK בגרסה 18.5.1 ואילך.

  3. במקרה הצורך, אפשר לאלץ אחזור של אות reCAPTCHA באופן הבא:

    • ‫Kotlin:
    // Initialize Firebase Authentication
    auth = Firebase.auth
    
    auth.initializeRecaptchaConfig().addOnCompleteListener(this) { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Recaptcha Enterprise Initialization successful.")
        } else {
            Log.w(TAG, "Recaptcha Enterprise Initialization failed.")
        }
    }
    
    • Java:
    // Initialize Firebase Authentication
    auth = FirebaseAuth.getInstance();
    auth.initializeRecaptchaConfig().addOnCompleteListener(
      this, new OnCompleteListener<void>() {
      @Override
      public void onComplete(@NonNull Task<void> task) {
        if (task.isSuccessful()) {
          Log.d(TAG, "Recaptcha Enterprise Initialization successful.");
        } else {
          Log.w(TAG, "Recaptcha Enterprise Initialization failed.");
        }
      }
    });
    

iOS

  1. מעדכנים ל-iOS SDK בגרסה 11.6.0 ואילך. אחרי שמשלבים את iOS SDK באפליקציה, ה-SDK מאחזר באופן אוטומטי את הגדרות reCAPTCHA ומפעיל את ההגנה לספקים שהגדרתם.

  2. כדי לשלב את reCAPTCHA iOS SDK באפליקציה, קראו את המאמר הכנת הסביבה.

  3. מוודאים שהדגל -ObjC מופיע בדגלי הקישור. עוברים אל Target (יעד) > Build Settings (הגדרות build) > All (הכול) > Linking (קישור) ומוודאים שמוצג -ObjC ב-Other Linker Flags.

  4. במקרה הצורך, אפשר לאלץ אחזור של אות reCAPTCHA באופן הבא:

    • Swift:
    // Initialize Firebase Authentication
    try await Auth.auth().initializeRecaptchaConfig()
    
    • ‫Objective-C:
    // Initialize Firebase Authentication
    [[FIRAuth auth] initializeRecaptchaConfigWithCompletion:^(NSError * _Nullable error) {
      // Firebase Authentication initialization finished
    }];
    

מעקב אחרי מדדי reCAPTCHA להגנה מפני בוטים

כדי לוודא שתהליכי האימות מוגנים, עקבו אחרי המדדים של reCAPTCHA שהפרויקט שלכם מפיק. בתהליכי אימות של אימייל וסיסמה, מומלץ לעקוב אחרי המדדים במצב ביקורת לפני שמגדירים את האכיפה למצב אכיפה. לדוגמה, המדדים האלה יכולים לעזור לכם לקבוע אם הגדרתם נכון את השילוב של Identity Platform עם reCAPTCHA Enterprise API. הם גם יכולים לעזור לכם לכוונן את סף הניקוד לתנועת המשתמשים. אם הקצאת המפתחות של reCAPTCHA נכשלת או אם חשבונות השירות הנדרשים לא נוצרו, ניסיונות האימות של reCAPTCHA עדיין יצליחו כרגיל.

כדי לוודא שאימות reCAPTCHA פועל, בודקים את המדדים הבאים שהפרויקט שולח ל-Cloud Monitoring:

מידע נוסף זמין במאמר מעקב אחרי מדדי reCAPTCHA.

אכיפת הגנה מפני בוטים באמצעות reCAPTCHA בתהליכי אימות של כתובת אימייל וסיסמה

בתהליכי אימות של אימייל וסיסמה שהגדרתם בהתחלה במצב AUDIT, אחרי שמוודאים שהאפליקציה מקבלת תנועת משתמשים תקינה, אפשר להעביר את emailPasswordEnforcementState למצב ENFORCE כדי לחסום בקשות שנכשלות בבדיקת reCAPTCHA. חשוב לוודא שאתם לא משבשים את חוויית השימוש של משתמשים קיימים, כולל משתמשים שעשויים להשתמש בגרסה ישנה יותר של האפליקציה.

כדי להפעיל אכיפה של reCAPTCHA בתהליכי אימות של אימייל וסיסמה בפרויקט או בדייר, מריצים את הקוד הבא באמצעות SDK לאדמינים:

const enforceRequest = {
  recaptchaConfig: {
    emailPasswordEnforcementState: 'ENFORCE',
  }
};

השבתת ההגנה מפני בוטים של reCAPTCHA

ספק אימייל וסיסמה

כדי להשבית את ההגנה מפני בוטים בתהליכי אימות באמצעות אימייל וסיסמה, מריצים את הפקודה הבאה באמצעות SDK לאדמינים:

const disableRequest = {
  recaptchaConfig: {
    emailPasswordEnforcementState: 'OFF',
  }
};

ספק הטלפון

כדי להשבית את כל ההגנה של reCAPTCHA בטלפון, כולל הגנה מפני בוטים, בתהליכי אימות שמבוססים על SMS, צריך להריץ את הפקודה הבאה באמצעות SDK לאדמינים:

const disableRequest = {
  recaptchaConfig: {
    phoneEnforcementState: 'OFF',
    useSmsBotScore: false,
    useSmsTollFraudProtection: false
  }
};

אם אתם משתמשים גם בהגנה על סמס של reCAPTCHA ורוצים להשאיר אותה מופעלת בזמן שאתם משביתים את ההגנה מפני בוטים, הגדירו את useSmsBotScore ל-false והשאירו את phoneEnforcementState מוגדר ל-ENFORCE:

const disableBotScoreOnlyRequest = {
  recaptchaConfig: {
    phoneEnforcementState: 'ENFORCE',
    useSmsBotScore: false,
    useSmsTollFraudProtection: true
  }
};

שינוי החלטות של reCAPTCHA באמצעות פונקציות Cloud Run

בנוסף להגדרת ערכי סף לניקוד, אתם יכולים לשנות את ההחלטה של reCAPTCHA לגבי טוקן מסוים באמצעות פונקציות חסימה, כדי לאפשר או לחסום תהליכים על סמך גורמים בהתאמה אישית. זה יכול לעזור במקרים שבהם הציון של reCAPTCHA להתחברות של משתמש מסוים נמוך, אבל המשתמש מהימן או אומת באמצעים אחרים, ולכן הוא יכול להשלים את הכניסה.

בדוגמה הבאה מוסבר איך לשנות את ההחלטה של reCAPTCHA באמצעות פונקציות חסימה:

Node.js

  const functions = require("firebase-functions/v1");
  exports.beforesmsv1 = functions.auth.user().beforeSms((context) => {
    if (
      context.smsType === "SIGN_IN_OR_SIGN_UP" &&
      context.additionalUserInfo.phoneNumber.includes('+91')
    ) {
      return {
        recaptchaActionOverride: "ALLOW",
      };
    }

    // Allow users to sign in with recaptcha score greater than 0.5
    if (event.additionalUserInfo.recaptchaScore > 0.5) {
      return {
        recaptchaActionOverride: 'ALLOW',
      };
    }

    // Block all others.
    return  {
      recaptchaActionOverride: 'BLOCK',
    }
  });

המאמרים הבאים