סקירה כללית
ב-16 בפברואר 2022 הודענו על תוכניות לשיפור הבטיחות של האינטראקציות עם Google OAuth באמצעות תהליכי OAuth מאובטחים יותר. המדריך הזה יעזור לכם להבין את השינויים הנדרשים ואת השלבים לביצוע העברה מוצלחת מזרימה של כתובת IP של לולאה חוזרת (loopback) לחלופות נתמכות.
המאמץ הזה הוא אמצעי הגנה מפני מתקפות פישינג ומתחזות לאפליקציות במהלך אינטראקציות עם נקודות הקצה של הרשאות OAuth 2.0 של Google.
מהו תהליך ההעברה של כתובת IP מסוג הלולאה החוזרת (loop)?
התהליך של כתובת ה-IP של הלולאה החוזרת תומך בשימוש בכתובת IP של לולאה חוזרת או ב-localhost
כרכיב המארח של ה-URI להפניה אוטומטית, שאליו נשלחים פרטי הכניסה אחרי שמשתמש מאשר בקשת הסכמה ל-OAuth. התהליך הזה חשוף להתקפות אדם בתווך, שבהן אפליקציה זדונית שמשתמשת באותו ממשק לולאה חוזרת במערכות הפעלה מסוימות עלולה ליירט את התגובה משרת ההרשאה ל-URI להפניה האוטומטית שצוין, ולקבל גישה לקוד ההרשאה.
תהליך כתובת ה-IP של הלולאה החוזרת (loopback) יוצא משימוש בסוגי לקוחות OAuth המקוריים ל-iOS, ל-Android ול-Chrome, אבל התמיכה בו תמשיך באפליקציות למחשב.
תאריכי תאימות חשובים
- 14 במרץ 2022 – לקוחות OAuth חדשים חסומים משימוש בזרימה של כתובת ה-IP ב-Loopback
- 1 באוגוסט 2022 – יכול להיות שתוצג הודעת אזהרה למשתמשים לגבי בקשות OAuth לא תואמות
- 31 באוגוסט 2022 – תעבורת כתובות ה-IP של הלולאה החוזרת (loopback) תיחסם ללקוחות OAuth מובנים ל-Android, לאפליקציית Chrome ול-iOS שנוצרו לפני 14 במרץ 2022
- 21 באוקטובר 2022 – כל הלקוחות הקיימים ייחסמו (כולל לקוחות פטורים)
לגבי בקשות שלא עומדות בדרישות, תוצג הודעת שגיאה למשתמשים. ההודעה תודיע למשתמשים שהאפליקציה חסומה, ותציג את כתובת האימייל לתמיכה שרשמת במסך ההסכמה ל-OAuth במסוף Google API.
- בודקים אם אתם מושפעים מהבעיה.
- אם אתם מושפעים מהשינוי, עליכם לעבור לחלופה נתמכת.
איך בודקים אם החשבון שלכם מושפע מהשינוי
בדיקת סוג מזהה הלקוח ב-OAuth
עוברים אל הקטע בקטע ומציגים את סוג מזהה הלקוח ב-OAuth בקטע מזהי לקוח ב-OAuth 2.0. הוא יכול להיות אחד מהאפשרויות הבאות: אפליקציית אינטרנט, Android, iOS, Universal Windows Platform (UWP), אפליקציית Chrome, טלוויזיות ומכשירי קלט מוגבלים, אפליקציה למחשב.
אם סוג הלקוח הוא Android, אפליקציית Chrome או iOS ואתם משתמשים בתהליך של כתובת ה-IP של הלולאה החוזרת (loopback), ממשיכים לשלב הבא.
אם אתם משתמשים בתהליך של כתובת ה-IP של הלולאה החוזרת (loopback) בלקוח OAuth של אפליקציה למחשב, אין צורך לבצע שום פעולה שקשורה להוצאה משימוש הזו, כי השימוש באותו סוג של לקוח OAuth ימשיך להיות נתמך.
איך בודקים אם האפליקציה משתמשת בזרימה של כתובת ה-IP של הלולאה החוזרת
בודקים את קוד האפליקציה או את קריאת הרשת היוצאת (אם האפליקציה משתמשת בספריית OAuth) כדי לקבוע אם בקשת ההרשאה של Google OAuth שהאפליקציה שולחת כוללת ערכים של URI להפניה אוטומטית חזרה (loopback).
בדיקת קוד האפליקציה
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
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
בדיקת קריאה יוצאת לרשת
- אפליקציית אינטרנט – בדיקת פעילות הרשת ב-Chrome
- Android – בדיקת תעבורת הנתונים ברשת באמצעות Network Inspector
-
אפליקציות Chrome
- עוברים אל הדף של התוספים ל-Chrome.
- מסמנים את התיבה מצב פיתוח בפינה השמאלית העליונה של דף התוסף.
- בוחרים את התוסף שרוצים לעקוב אחריו
- לוחצים על הקישור background page בקטע Inspect views בדף התוסף.
- יופיע חלון קופץ של כלים למפתחים, שבו תוכלו לעקוב אחרי תעבורת הנתונים ברשת בכרטיסייה Network.
- iOS – ניתוח תעבורת HTTP באמצעות Instruments
- Universal Windows Platform (UWP) – בדיקת תעבורת הנתונים ברשת ב-Visual Studio
- אפליקציות למחשב – משתמשים בכלי לתיעוד תעבורת הנתונים ברשת שזמין למערכת ההפעלה שבה האפליקציה פותחה.
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
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 המומלצים (Android, iOS).
ה-SDK מאפשר גישה קלה ל-Google APIs ומטפל בכל הקריאות לנקודות הקצה של הרשאות OAuth 2.0 של Google.
בקישורים הבאים למסמכי העזרה מוסבר איך להשתמש ב-SDK המומלצים כדי לגשת לממשקי Google API בלי להשתמש ב-URI להפניה אוטומטית לכתובת IP של לולאה חוזרת.
גישה ל-Google APIs ב-Android
גישה מצד הלקוח
בדוגמה הבאה מוסבר איך לגשת ל-Google APIs בצד הלקוח ב-Android באמצעות ספריית Android המומלצת של Google Identity Services.
ListrequestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA); AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build(); Identity.getAuthorizationClient(activity) .authorize(authorizationRequest) .addOnSuccessListener( authorizationResult -> { if (authorizationResult.hasResolution()) { // Access needs to be granted by the user PendingIntent pendingIntent = authorizationResult.getPendingIntent(); try { startIntentSenderForResult(pendingIntent.getIntentSender(), REQUEST_AUTHORIZE, null, 0, 0, 0, null); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage()); } } else { // Access already granted, continue with user action saveToDriveAppFolder(authorizationResult); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
מעבירים את authorizationResult
לשיטה שהוגדרה כדי לשמור תוכן בתיקיית Drive של המשתמש. ל-authorizationResult
יש את השיטה
getAccessToken()
שמחזירה את אסימון הגישה.
גישה בצד השרת (אופליין)
בדוגמה הבאה מוסבר איך לגשת לממשקי Google API בצד השרת ב-Android.ListrequestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA); AuthorizationRequest authorizationRequest = AuthorizationRequest.builder() .requestOfflineAccess(webClientId) .setRequestedScopes(requestedScopes) .build(); Identity.getAuthorizationClient(activity) .authorize(authorizationRequest) .addOnSuccessListener( authorizationResult -> { if (authorizationResult.hasResolution()) { // Access needs to be granted by the user PendingIntent pendingIntent = authorizationResult.getPendingIntent(); try { startIntentSenderForResult(pendingIntent.getIntentSender(), REQUEST_AUTHORIZE, null, 0, 0, 0, null); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage()); } } else { String authCode = authorizationResult.getServerAuthCode(); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
ל-authorizationResult
יש את השיטה
getServerAuthCode()
שמחזירה את קוד ההרשאה, שאפשר לשלוח לקצה העורפי כדי לקבל אסימון גישה ואסימון רענון.
גישה לממשקי Google API באפליקציה ל-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 API בצד הלקוח. איך לגשת לממשקי Google API בצד הלקוח.
גישה בצד השרת (אופליין)
בדוגמה הבאה מוסבר איך לגשת ל-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 API בצד השרת.
לקוח של אפליקציית Chrome
אם קבעת שהאפליקציה שלך משתמשת בתהליך של כתובת ה-IP של הלולאה החוזרת (loopback) בלקוח של אפליקציית 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 מוסבר איך לגשת למשתמשים מאומתים ולקרוא לנקודות קצה של Google באמצעות Chrome Identity API.