אם ביצעתם בעבר שילוב עם כניסה באמצעות חשבון Google באמצעות
GoogleAuthUtil.getToken
או Plus.API
, עליך לעבור לגרסה החדשה ביותר
כניסה באמצעות ממשק API כדי לשפר את האבטחה ולספק חוויית משתמש טובה יותר.
העברה מתוכנת אנטי-דפוס של אסימון גישה
אסור לשלוח אסימוני גישה שהתקבלו באמצעות GoogleAuthUtil.getToken
אל
בשרת העורפי כהצהרת זהות, מכיוון שלא ניתן לאמת בקלות
שהאסימון הונפק לקצה העורפי שלכם, כך שאתם חשופים להכנסת האסימון
של אסימון גישה מפני תוקף.
לדוגמה, אם קוד Android שלך נראה כמו בדוגמה שבהמשך, עליך להעביר את האפליקציה לשיטות המומלצות הנוכחיות.
בדוגמה, בקשות לאסימוני גישה משתמשות ב-oauth2:
וגם במחרוזת היקף בתור
הפרמטר scope
עבור הקריאה GoogleAuthUtil.getToken
(oauth2:https://www.googleapis.com/auth/plus.login
).
במקום לבצע אימות באמצעות אסימון גישה שהתקבל באמצעות
GoogleAuthUtil.getToken
, יש להשתמש בתהליך של אסימון המזהה או בתהליך של קוד ההרשאה.
מעבר לזרימת האסימון המזהה
אם כל מה שצריך הוא מזהה משתמש, כתובת אימייל, שם או כתובת URL של תמונת פרופיל, משתמשים בתהליך של אסימון מזהה.
כדי לעבור לתהליך של אסימון המזהה, צריך לבצע את השינויים הבאים:
בצד הלקוח ב-Android
- להסיר את ההרשאה
GET_ACCOUNTS
(אנשי קשר) אם מבקשים אותה - אפשר להחליף קוד באמצעות
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
, אוAccountManager.newChooseAccountIntent()
אלAuth.GOOGLE_SIGN_IN_API
עם הגדרתGoogleSignInOptions.Builder.requestIdToken(...)
.
בצד השרת
- יוצרים נקודת קצה חדשה לאימות של אסימון מזהה
- השבתה של נקודת הקצה הישנה לאחר העברת אפליקציות הלקוח
מעבר לתהליך קוד ההרשאה של השרת
אם השרת שלכם צריך גישה לממשקי API אחרים של Google, כמו Google Drive, YouTube, או אנשי קשר, משתמשים בתהליך קוד ההרשאה של השרת.
כדי לעבור לתהליך קוד ההרשאה של השרת, צריך לבצע את השינויים הבאים:
בצד הלקוח ב-Android
- להסיר את ההרשאה
GET_ACCOUNTS
(אנשי קשר) אם מבקשים אותה - אפשר להחליף קוד באמצעות
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
, אוAccountManager.newChooseAccountIntent()
אלAuth.GOOGLE_SIGN_IN_API
עם הגדרתGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
בצד השרת
- יצירה של נקודת קצה חדשה לתהליך קוד ההרשאה של השרת
- השבתה של נקודת הקצה הישנה לאחר העברת אפליקציות הלקוח
עדיין אפשר לשתף לוגיקת גישה ל-API בין נקודת הקצה הישנה לחדשה. לדוגמה:
GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(...); String accessToken = tokenResponse.getAccessToken(); String refreshToken = tokenResponse.getRefreshToken(); Long expiresInSeconds = tokenResponse.getExpiresInSeconds(); // Shared by your old and new implementation, old endpoint can pass null for refreshToken private void driveAccess(String refreshToken, String accessToken, Long expiresInSeconds) { GoogleCredential credential = new GoogleCredential.Builder() .setTransPort(...) ... .build(); credential.setAccessToken(accessToken); credential.setExpiresInSeconds(expiresInSeconds); credential.setRefreshToken(refreshToken); }
העברה מתהליך האסימון המזהה של GoogleAuthUtil
אם משתמשים ב-GoogleAuthUtil
לקבלת אסימונים מזהים, צריך לעבור לגרסה החדשה
תהליך של אסימון מזהה לכניסה באמצעות ה-API
לדוגמה, אם קוד Android שלך נראה כמו בדוגמה הבאה, עליך migrate:
בדוגמה, בקשות של אסימון מזהה משתמשות ב-audience:server:client_id
וגם
מזהה הלקוח של שרת האינטרנט שלכם כפרמטר 'scope' של הפרמטר
שיחה ב-GoogleAuthUtil.getToken
(audience:server:client_id:9414861317621.apps.googleusercontent.com
).
תהליך העבודה החדש של אסימון מזהה ל-Sign-In API כולל את היתרונות הבאים:
- חוויית כניסה פשוטה ונוחה בהקשה אחת
- השרת שלך יכול לקבל את הפרטים של פרופיל המשתמש ללא שיחת רשת נוספת
כדי לעבור לתהליך של אסימון המזהה, צריך לבצע את השינויים הבאים:
בצד הלקוח ב-Android
- להסיר את ההרשאה
GET_ACCOUNTS
(אנשי קשר) אם מבקשים אותה - אפשר להחליף קוד באמצעות
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
, אוAccountManager.newChooseAccountIntent()
אלAuth.GOOGLE_SIGN_IN_API
עם הגדרתGoogleSignInOptions.Builder.requestIdToken(...)
.
בצד השרת
הממשק החדש של Sign-In API מנפיק אסימונים מזהים שתואמים ל-OpenID Connect
מפרט, שלא כמו GoogleAuthUtil.getToken
, שנעשה בו שימוש בפורמט שהוצא משימוש.
באופן ספציפי, המנפיק הוא עכשיו https://accounts.google.com
, עם https
של Google.
במהלך ההעברה, השרת שלך צריך לאמת אסימון מזהה משני החשבונות את לקוחות Android הישנים והחדשים שלכם. כדי לאמת את שני הפורמטים של האסימון, מגדירים את הקוד שתואם לספריית הלקוח שבה אתם משתמשים (אם אתם משתמשים בה):
- Java (ספריות לקוח של Google APIs): שדרוג לגרסה 1.21.0 ואילך
- PHP (ספריות לקוח של Google APIs): אם אתם משתמשים בגרסה 1, עליכם לשדרג לגרסה 1.1.6 ואילך. אם משתמשים בגרסה 2, יש לשדרג ל-2.0.0-RC1 ואילך
- Node.js: שדרוג לגרסה 0.9.7 ואילך
- Python או שימוש בהטמעות משלכם: צריך לאשר את שני המנפיקים הבאים:
https://accounts.google.com
ו-accounts.google.com
מעבר מתהליך קוד ההרשאה של השרת GoogleAuthUtil
אם משתמשים ב-GoogleAuthUtil
כדי לקבל קוד הרשאה לשרת, צריך לעבור אל
תהליך חדש של קוד אימות ב-Sign-In API.
לדוגמה, אם קוד Android שלך נראה כמו בדוגמה הבאה, עליך migrate:
בדוגמה, בקשות לקוד אימות שרת משתמשות ב-oauth2:server:client_id
+
מזהה הלקוח של שרת האינטרנט שלכם כפרמטר scope
של
שיחת GoogleAuthUtil.getToken
(oauth2:server:client_id:9414861317621.apps.googleusercontent.com
).
התהליך החדש של קוד ההרשאה לכניסה באמצעות ממשק API כולל את היתרונות הבאים:
- חוויית כניסה פשוטה ונוחה בהקשה אחת
- אם פועלים לפי המדריך להעברת נתונים (מיגרציה) שלמטה, השרת שלך יכול לקבל אסימון מזהה מכילים את פרטי הפרופיל של המשתמש כשמבצעים החלפה של קוד ההרשאה
כדי לעבור לתהליך החדש של קוד ההרשאה, צריך לבצע את השינויים הבאים:
בצד הלקוח ב-Android
- להסיר את ההרשאה
GET_ACCOUNTS
(אנשי קשר) אם מבקשים אותה - אפשר להחליף קוד באמצעות
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
, אוAccountManager.newChooseAccountIntent()
אלAuth.GOOGLE_SIGN_IN_API
עם הגדרתGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
בצד השרת
יש לשמור את הקוד הנוכחי, אבל לציין https://oauth2.googleapis.com/token
כנקודת הקצה של שרת האסימון במהלך היצירה
אובייקט GoogleAuthorizationCodeTokenRequest
, כדי לקבל אסימון מזהה
עם כתובת האימייל, מזהה המשתמש ופרטי הפרופיל של המשתמש, ללא צורך
שיחת רשת. נקודת הקצה (endpoint) הזו תואמת באופן מלא לאחור, והקוד שבהמשך
יפעלו עבור קודי אימות שרת שאוחזרו ממכשיר Android הישן וגם ממכשיר Android החדש
של הלקוח.
GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest( transport, jsonFactory, // Use below for tokenServerEncodedUrl parameter "https://oauth2.googleapis.com/token", clientSecrets.getDetails().getClientId(), clientSecrets.getDetails().getClientSecret(), authCode, REDIRECT_URI) .execute(); ... // You can also get an ID token from auth code exchange. GoogleIdToken googleIdToken = tokenResponse.parseIdToken(); GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory) .setAudience(Arrays.asList(SERVER_CLIENT_ID)) .setIssuer("https://accounts.google.com") .build(); // Refer to ID token documentation to see how to get data from idToken object. GoogleIdToken idToken = verifier.verify(idTokenString); ...