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

סקירה כללית

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

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

מהו הזרימה של כתובת ה-IP של הלולאה החוזרת (loopback)?

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

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

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

  • 14 במרץ 2022 – ללקוחות OAuth חדשים אין גישה לתהליך של כתובת ה-IP של הלולאה החוזרת (loopback)
  • 1 באוגוסט 2022 – יכול להיות שתוצג הודעת אזהרה מול המשתמש בבקשות OAuth שלא תואמות למדיניות
  • 31 באוגוסט 2022 – התהליך של הוספת כתובת IP מסוג הלולאה החוזרת נחסם ללקוחות מקומיים ב-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 , Universal Windows Platform (UWP), Chrome app, TVs and Limited Input , אפליקציה למחשב.

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

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

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

בודקים את קוד האפליקציה או את שיחת הרשת היוצאת (אם האפליקציה משתמשת בספריית 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 של ההפניה האוטומטית לכתובת אחרת

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

השיטה לבדיקה של קריאות לרשת משתנה בהתאם לסוג הלקוח של האפליקציה.
כשבודקים קריאות רשת, צריך לחפש בקשות שנשלחו ל נקודות הקצה (endpoint) של 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
דוגמה לבקשה לזרימה של כתובת URL להפניה אוטומטית מסוג הלולאה החוזרת (loopback) באופן הבא:
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 מסוג הלולאה החוזרת (loopback) עם לקוח מסוג OAuth ב-Android או ב-iOS, צריך לעבור להשתמש בערכות ה-SDK לנייד לכניסה באמצעות חשבון Google (Android, iOS).

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

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

גישה לממשקי Google API ב-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 API בצד הלקוח ב-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 של כתובת ה-URL להפניה אוטומטית מסוג לולאה חוזרת.

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 מוסבר איך לגשת למשתמשים שמאמתים אותם ולקרוא לנקודות הקצה של Google באמצעות Chrome Identity API.