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

סקירה כללית

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

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

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

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

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

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

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

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

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

קביעה אם אתם מושפעים

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

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

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

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

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

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

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

בודקים את הקטע בקוד האפליקציה שבו מבצעים קריאות ל נקודות הקצה של ההרשאות ב-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 ומטפל בכל הקריאות לנקודות הקצה (endpoints) של הרשאות 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)
    });
   });
 });
};

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