מדריך להעברת כתובת IP מסוג הלולאה החוזרת (loopback)

סקירה כללית

ב-16 בפברואר 2022, הודענו על תוכניות להפוך את האינטראקציות של OAuth של Google לבטוחות יותר באמצעות תהליכי OAuth מאובטחים יותר. המדריך הזה יעזור לך להבין את השינויים והשלבים הנדרשים כדי לבצע העברה מוצלחת מהתהליך של כתובת ה-IP בלופ לאחור אל החלופות הנתמכות.

המאמצים האלה משמשים כאמצעי הגנה מפני מתקפות פישינג והתחזות לאפליקציות במהלך אינטראקציות עם נקודות הקצה (endpoints) של הרשאות OAuth 2.0 של Google.

מהי התהליך של כתובת IP בלולאה חוזרת?

התהליך של כתובת ה-IP בלולאה חוזרת תומך בשימוש בכתובת IP בלופ חוזר, או ב-localhost כרכיב המארח של ה-URI של ההפניה האוטומטית, שאליו נשלחים פרטי הכניסה אחרי שהמשתמש מאשר בקשת הסכמה ל-OAuth. התהליך הזה חשוף למתקפות מסוג man in the middle, שבהן אפליקציה זדונית שמשתמשת באותו ממשק לולאה חוזרת בחלק ממערכות ההפעלה עלולות ליירט את התגובה משרת ההרשאות ל-URI של ההפניה האוטומטית ולקבל גישה לקוד ההרשאה.

התהליך של הגדרת הלולאה החוזרת של כתובת ה-IP יוצא משימוש בסוגי הלקוחות המקוריים של iOS, Android ו-Chrome OAuth, אבל התמיכה תמשיך להיות זמינה באפליקציות למחשב.

תאריכי תאימות עיקריים

  • 14 במרץ 2022 – חסימת השימוש של לקוחות OAuth חדשים בתהליך של כתובת IP בלולאה חוזרת
  • 1 באוגוסט 2022 – יכול להיות שתוצג הודעת אזהרה למשתמשים בבקשות OAuth שלא עומדות בדרישות.
  • 31 באוגוסט 2022 – התהליך של כתובת ה-IP בלולאה החוזרת נחסם למשתמשים מקוריים של Android, אפליקציית Chrome ו-iOS OAuth שנוצרו לפני 14 במרץ 2022.
  • 21 באוקטובר 2022 – כל הלקוחות הקיימים חסומים (כולל לקוחות פטורים)

במקרים של בקשות שלא תואמות למדיניות, תוצג הודעת שגיאה למשתמש. המשתמשים יוכלו לראות שהאפליקציה חסומה כשהאימייל שרשמת לתמיכה יוצג במסך ההסכמה ל-OAuth ב-Google API Console.

כדי להשלים את תהליך ההעברה צריך לבצע שני שלבים עיקריים:
  1. בדקו אם אתם מושפעים.
  2. אם הבעיה משפיעה עליך, כדאי לעבור לחלופה נתמכת.

רוצים לדעת אם אתם מושפעים מהמצב?

בדיקת הסוג של מזהה הלקוח ב-OAuth

מנווטים אל Credentials page של Google API Console ובודקים את סוג מזהה הלקוח ב-OAuth בקטע מזהי לקוחות ב-OAuth 2.0. המכשיר יכול להיות אחת מהאפשרויות הבאות: אפליקציית אינטרנט, Android, iOS, פלטפורמת Universal Windows (UWP), אפליקציית Chrome, טלוויזיות ומכשירי קלט מוגבלים, אפליקציה למחשב.

אפשר להמשיך לשלב הבא אם סוג הלקוח הוא Android, אפליקציית Chrome או iOS, ואתם משתמשים בתהליך של כתובת ה-IP בלולאה חוזרת.

אם משתמשים בתהליך של כתובת IP בלולאה חוזרת בלקוח OAuth לאפליקציה למחשב, כי השימוש בלקוח OAuth הזה יימשך, אין צורך לעשות דבר.

איך לקבוע אם באפליקציה נעשה שימוש בזרימה של כתובת IP בלולאה חוזרת

בודקים את קוד האפליקציה או את שיחת הרשת היוצאת (אם האפליקציה משתמשת בספריית OAuth) כדי להבין אם בקשת ההרשאה של Google OAuth, האפליקציה משתמשת בערכי URI של הפניה חוזרת.

בדיקת קוד האפליקציה

יש לבדוק את הקטע בקוד האפליקציה שבו מבצעים קריאות ל נקודות הקצה להרשאות ב-Google OAuth, ולבדוק אם לפרמטר redirect_uri יש אחד מהערכים הבאים:
  • redirect_uri=http://127.0.0.1:<port> למשל redirect_uri=http://127.0.0.1:3000
  • redirect_uri=http://[::1]:<port> למשל redirect_uri=http://[::1]:3000
  • redirect_uri=http://localhost:<port> למשל redirect_uri=http://localhost:3000
דוגמה של תהליך הפניה לכתובת IP מסוג לולאה חוזרת תיראה כמו בדוגמה הבאה:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

בדיקה של שיחת רשת יוצאת

השיטה לבדיקת קריאות רשת משתנה בהתאם לסוג הלקוח של האפליקציה.
במהלך הבדיקה של קריאות רשת, מחפשים בקשות שנשלחו אל נקודות הקצה להרשאות ב-Google OAuth ובוחנים אם לפרמטר redirect_uri יש אחד מהערכים הבאים:
  • redirect_uri=http://127.0.0.1:<port> למשל redirect_uri=http://127.0.0.1:3000
  • redirect_uri=http://[::1]:<port> למשל redirect_uri=http://[::1]:3000
  • redirect_uri=http://localhost:<port> למשל redirect_uri=http://localhost:3000
בקשת תהליך של הפניה אוטומטית לכתובת IP מסוג לולאה חוזרת תיראה כמו בדוגמה הבאה:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

העברה לחלופה נתמכת

לקוחות של מכשירים ניידים (Android / iOS)

אם גילית שהאפליקציה שלך משתמשת בזרימה של כתובת IP בלולאה חוזרת מסוג לקוח OAuth ל-Android או ל-iOS, עליך לעבור להשתמש בערכות ה-SDK לנייד לכניסה באמצעות חשבון Google (Android, iOS).

באמצעות ה-SDK קל לגשת ל-Google APIs ומטפל בכל הקריאות לנקודות הקצה (endpoint) של OAuth 2.0 של Google.

קישורי התיעוד שבהמשך מספקים מידע על אופן השימוש בערכות SDK לכניסה באמצעות חשבון Google כדי לגשת ל-Google APIs בלי להשתמש ב-URI להפניה אוטומטית של כתובת IP בלולאה חוזרת.

גישה ל-Google APIs ב-Android

גישה מצד השרת (אופליין)
הדוגמה הבאה מראה איך ניגשים ל-Google APIs בצד השרת ב-Android.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
  GoogleSignInAccount account = task.getResult(ApiException.class);
  
  // request a one-time authorization code that your server exchanges for an
  // access token and sometimes refresh token
  String authCode = account.getServerAuthCode();
  
  // Show signed-in UI
  updateUI(account);

  // TODO(developer): send code to server and exchange for access/refresh/ID tokens
} catch (ApiException e) {
  Log.w(TAG, "Sign-in failed", e);
  updateUI(null);
}

במדריך לגישה מצד השרת מוסבר איך לגשת ל-Google APIs מצד השרת.

גישה ל-Google APIs באפליקציה ל-iOS

גישה מצד הלקוח

הדוגמה הבאה מראה איך ניגשים ל-Google APIs בצד הלקוח ב-iOS.

user.authentication.do { authentication, error in
  guard error == nil else { return }
  guard let authentication = authentication else { return }
  
  // Get the access token to attach it to a REST or gRPC request.
  let accessToken = authentication.accessToken
  
  // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
  // use with GTMAppAuth and the Google APIs client library.
  let authorizer = authentication.fetcherAuthorizer()
}

אפשר להשתמש באסימון הגישה כדי להפעיל את ה-API על ידי הכללת אסימון הגישה בכותרת של בקשת REST או gRPC (Authorization: Bearer ACCESS_TOKEN) או על ידי שימוש בהרשאת האחזור (GTMFetcherAuthorizationProtocol) עם ספריית הלקוח של Google APIs עבור Objective-C ל-REST.

במדריך לגישה מצד הלקוח מוסבר איך לגשת ל-Google APIs בצד הלקוח. בנושא הגישה ל-Google APIs בצד הלקוח.

גישה מצד השרת (אופליין)
הדוגמה הבאה מראה איך לגשת ל-Google APIs בצד השרת כדי לתמוך בלקוח iOS.
GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in
  guard error == nil else { return }
  guard let user = user else { return }
  
  // request a one-time authorization code that your server exchanges for
  // an access token and refresh token
  let authCode = user.serverAuthCode
}

במדריך לגישה מצד השרת מוסבר איך לגשת ל-Google APIs מצד השרת.

לקוח אפליקציית Chrome

אם לדעתך האפליקציה משתמשת בזרימה של כתובת ה-IP בלולאה חוזרת בלקוח של אפליקציית Chrome, עליך לעבור לשימוש ב- Chrome Identity API.

הדוגמה הבאה מראה איך משיגים את כל אנשי הקשר של המשתמשים מבלי להשתמש ב-URI להפניה אוטומטית בלולאה חוזרת של כתובת IP.

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {

  
  // retrieve access token
  chrome.identity.getAuthToken({interactive: true}, function(token) {
  
  // ..........


  // the example below shows how to use a retrieved access token with an appropriate scope
  // to call the Google People API contactGroups.get endpoint

  fetch(
    'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY',
    init)
    .then((response) => response.json())
    .then(function(data) {
      console.log(data)
    });
   });
 });
};

כדי לקבל מידע נוסף על גישה לאימות משתמשים ולקריאה לנקודות קצה ב-Google באמצעות Chrome Identity API, אפשר לעיין במדריך ל-Chrome Identity API.