במדריך הזה מתוארת קבוצה של תכונות שמחזירות אותות נוספים של מהימנות לגבי חשבון Google. אותות האמון האלה עוזרים למערכת לניהול החשבון לקבל החלטות מבוססות-סיכון במהלך ההרשמה, יצירת החשבון ובהמשך לגבי משתמשים חוזרים.
סשנים
בקשת אימות של אפליקציה מחזירה טוקן מזהה. לדוגמה, כשלוחצים על כפתור 'כניסה באמצעות חשבון Google', מוחזר טוקן מזהה לאפליקציית הלקוח או השרת של Android, iOS או האינטרנט שבה מוצג הכפתור.
אימות לצורך כניסה לחשבון Google הוא אירוע נפרד. הטענות שמוחזרות באסימון המזהה מייצגות את האירוע הזה. לדוגמה, שעת האימות והשיטות ששימשו לכניסה לחשבון Google.
יש שני רגעי אימות ושני סשנים של משתמשים:
- סשן משתמש <-> Google נוצר כשמשתמש נכנס לחשבון Google שלו. Google מנהלת את מחזור החיים והאבטחה של הסשן הזה. הטענות
auth_timeו-amrמספקות תובנות לגבי הסשן הזה. - משתמש <-> סשן באפליקציה נוצר אחרי שהמשתמש נכנס לאפליקציה, ולרוב מתחיל באמצעות 'כניסה באמצעות חשבון Google'. האפליקציה שלכם מנהלת את הסשן הזה באמצעות הטענות כדי לשפר את ההחלטות לגבי ניהול הסשן והחשבון.
משתמשים מקיימים אינטראקציה עם שירותי Google במכשירים שונים, כמו טלפונים, מחשבים, מסכים חכמים או טלוויזיות. התחברות לכל פלטפורמה או מכשיר יוצרת סשן נפרד. בכניסות לחשבון באינטרנט, נוצר סשן בין הדפדפן הספציפי לבין Google. חשוב לדעת שבמצב גלישה פרטית ובמצב אנונימי נוצרים סשנים נפרדים ומבודדים. לכן, יכולים להיות כמה סשנים שונים שפעילים בו-זמנית בחשבון Google אחד, בדפדפנים ובמכשירים שונים. פרטים נוספים זמינים במאמר איך בודקים באילו מכשירים יש גישה לחשבון.
סטטוס חשבון Google
האירועים האופייניים במחזור החיים של חשבון Google הם:
- אדם בוחר ליצור חשבון Google, ואז
- יכול להיות ש-Google תשבית את החשבון או שהמשתמש יפעיל אותו מחדש אחרי שיפעל לפי ההוראות במאמר איך משחזרים את חשבון Google או Gmail, וגם
- יכול להיות שאדם יחליט למחוק את חשבון Google שלו, או ש-Google תמחק את החשבון בהתאם למדיניות בנושא חשבונות Google לא פעילים.
התכונות של חבילת האבטחה שמתוארות במדריך הזה חלות על חשבונות פעילים או מושבתים, אבל לא על אירועים של יצירה או מחיקה של חשבון Google.
Google עשויה להשבית חשבון בכל שלב. חלק מהסיבות מפורטות במאמר החשבון שלך הושבת. במקרה כזה, כל החיבורים הפעילים ב-Google מסתיימים ונשלח אירוע RISC על ידי שירות ההגנה על כל החשבונות של Google. לחשבונות מושבתים אין אפשרות להשתמש בכניסה באמצעות חשבון Google, כלומר אף פעם לא מונפק להם טוקן מזהה ולכן אי אפשר להשתמש בו כדי לעקוב אחרי חשבונות משתמשים מושבתים.
קבלת אירועים של הגנה חוצת-חשבונות (RISC) היא אופציונלית, אבל האירועים האלה משמשים כאותות חשובים לניהול הסשן בין המשתמש לבין האפליקציה שלכם, וגם כדי לקבוע אם הוראות להטמעה של RISC ולהיענות לאירועים מפורטות במאמר הגנה על כל החשבונות.
הגדרה
כדי לקבל טענות נוספות, האפליקציה צריכה להיות מפורסמת, מאומתת ועם התכונות של חבילת האבטחה מופעלות. קודם צריך לוודא שהאפליקציה מפורסמת ומאומתת:
- פתיחה של פלטפורמת האימות של Google
- בוחרים או יוצרים את הפרויקט של האפליקציה
- לוחצים על קהל ומוודאים שסטטוס הפרסום הוא בשלבי הפקה.
- לוחצים על מרכז האימות ומוודאים שסטטוס האימות הוא מאומת.
לאחר מכן, מפעילים טענות נוספות:
- לוחצים על הגדרות בתפריט.
- בקטע הגדרות מתקדמות, בוחרים:
- טענות לגבי גיל הסשן כדי להפעיל את
auth_time - טענות לגבי חוזק האימות כדי להפעיל את
amr
- טענות לגבי גיל הסשן כדי להפעיל את
מידע נוסף זמין במרכז העזרה בנושא אימות אפליקציות OAuth.
תכונות נתמכות
בקטע הזה מפורטות התכונות השונות שכלולות בחבילת האבטחה.
הפניות לשיטות אימות
ההפניה לשיטות אימות (amr) היא טענה של OpenID Connect שמתארת את השיטות ששימשו במהלך אירוע האימות האחרון בין המשתמש לבין Google.
מבין הערכים האפשריים של IANA.AMR, Google תומכת בערכים הבאים שמציינים:
hwkנעשה שימוש במפתח אבטחה פיזיmfaהאימות הרב-שלבי הושלם- נעשה שימוש בסיסמה של
pwd - נעשה שימוש במפתח תוכנה כמו מפתח גישה
swk smsנעשה שימוש בהודעת SMS לאימותtelנעשה שימוש בשיחת טלפון לאימות
אחד או יותר מהערכים האלה מוחזרים כמערך JSON של מחרוזות בתוך הצהרת amr של אסימון המזהה.
התביעה amr נכללת באסימון המזהה רק אם יש מידע על שיטת האימות שבה נעשה שימוש, והיא עשויה לא להופיע גם אם היא נדרשת.
בעלי חשבונות Google יכולים לדרוש אימות דו-שלבי ולבחור באילו שיטות MFA להשתמש.
כשההגנה המתקדמת מופעלת בחשבון Google, נדרשת שיטת אימות דו-שלבי חזקה כמו מפתחות אבטחה Titan (hwk) או מפתח גישה (swk). בשני המקרים, הערך mfa מופיע כשמשתמשים ביותר מגורם אחד במהלך הכניסה לחשבון Google.
הנוכחות של mfa מאשרת שאירוע האימות עמד בדרישות של Google לאימות רב-שלבי. לדוגמה, אימות של חשבון Google באמצעות סיסמה (pwd) ומפתח גישה (swk) יוצר את הטענה "amr": ["mfa", "pwd", "swk"].
במקורות המידע הבאים יש מידע נוסף על אבטחת חשבונות ואימות משתמשים: קבלת אבטחת החשבון החזקה ביותר של Google באמצעות תוכנית ההגנה המתקדמת, כניסה באמצעות מפתח גישה במקום סיסמה ושימוש במפתח אבטחה לצורך אימות דו-שלבי.
אדמינים ב-Workspace שולטים במדיניות האימות של חשבונות מנוהלים ב-Workspace, ויכולים לדרוש אימות רב-שלבי או שימוש במפתחות אבטחה. מידע נוסף זמין במאמרים סקירה כללית של ניהול הזהויות ב-Google, דרישה לאימות רב-שלבי ב-Google Cloud ואמצעי הגנה ובקרה על הכניסה לחשבון.
זמן האימות
התביעה auth_time היא חלק סטנדרטי בפרוטוקול OpenID Connect, שמספק מידע על מתי משתמש הקצה עבר אימות לאחרונה ב-Google. זהו מספר JSON שמייצג את מספר השניות שחלפו מאז תקופת Unix (1 בינואר 1970, בשעה 00:00:00 UTC), והוא הזמן שבו המשתמש עבר אימות לאחרונה. אפשר לחשוב על זה כחותמת זמן שמציינת את אירוע הכניסה האחרון של המשתמש לחשבון Google מהמכשיר או מהדפדפן הנוכחיים. התביעה הזו נכללת בטוקן המזהה, שהוא טוקן אינטרנט JSON (JWT) שמכיל מידע מאומת על האימות ועל המשתמש.
התביעה auth_time חשובה לאפליקציה שלכם כי היא מאפשרת לכם לקבוע מתי משתמש התחבר באופן פעיל לחשבון Google במכשיר או בדפדפן שבו הוא משתמש. הדבר חשוב במיוחד למטרות אבטחה, כמו:
לקבל החלטה מושכלת לגבי הצורך להוסיף לאפליקציה שלכם שלב נוסף של אימות זהות לפני ביצוע פעולות רגישות של משתמשים, כמו מחיקת החשבון, שינוי אמצעי התשלום או שינוי הפרטים ליצירת קשר בחשבון. Google לא תומכת בבקשות לאימות מחדש של חשבון Google.
שימוש בנתונים עדכניים ויציבים של סשן בחשבון Google של המשתמש כאות מהימן. באופן כללי, ערך
auth_timeעדכני מצביע על רעננות, בעוד שערך ישן יותר מצביע על יציבות.
באפליקציות אינטרנט, השילוב של הדפדפן ומערכת ההפעלה של המשתמש מהווה סשן אחרי שהמשתמש נכנס לחשבון Google שלו. בנוסף, האתר שלכם מנהל סשן משתמש נפרד. ערך auth_time חדש יותר מציין שהמשתמש נכנס לאחרונה לחשבון Google שלו. בדרך כלל זהו סימן למשתמש פעיל ומעורב, ואפשר לפרש את זה כסימן לסיכון נמוך יותר.
בפלטפורמות לנייד כמו Android, משתמשים בדרך כלל נכנסים ישירות למכשיר באמצעות שיטות ביומטריות כמו טביעת אצבע או סריקת פנים, וקוד אישי או ביטול נעילה באמצעות תבנית שספציפיים למכשיר. אפליקציות ופלטפורמות לנייד משתמשות לעיתים קרובות בשיטות אימות שמבוססות על הפלטפורמה, במקום ליצור סשן חדש עם Google. כתוצאה מכך, הכניסות לחשבון Google לא מתבצעות לעיתים קרובות, והעדכונים ל-auth_time לא מתבצעים לעיתים קרובות גם כן. לכן, ערך עדכני של auth_time עשוי להצביע על שינוי בסשן ארוך טווח בחשבון Google, וכך על סיכון מוגבר.
אותות אמון הם נושא מורכב. השימוש ב-auth_time צפוי להתבצע יחד עם אותות אחרים, כמו האם מופעל אימות רב-שלבי (MFA), שיטת האימות שבה נעשה שימוש ומשך סשן המשתמש בין האפליקציה לפלטפורמה שלכם.
בקשות
השיטה הספציפית שמשמשת לבקשת הטענות auth_time ו-amr משתנה בהתאם ל-API שבו נעשה שימוש, אבל כל API כולל פרמטר אופציונלי claims לבקשת auth_time ו-amr.
פרוטוקול OIDC
כשמשתמשים בפלטפורמת OAuth ישירות, צריך לבקש את auth_time על ידי הוספתו לפרמטר הבקשה האופציונלי claims. מגדירים את הערך של השדה id_token באובייקט ה-JSON של הטענות ל-{"auth_time":{"essential":true}}. באופן דומה, מוסיפים את {"amr":{"essential":true}} ל-claims כדי לבקש את amr:
https://accounts.google.com/o/oauth2/v2/auth? response_type=id_token& client_id=YOUR_CLIENT_ID& scope=openid email profile& redirect_uri=https://example.com/user-login& nonce=123-456-7890& claims={ "id_token": { "auth_time": { "essential":true }, "amr": {"essential":true} } }
מידע נוסף זמין במאמר בנושא OpenID Connect.
GIS for Web
לספרייה Sign in with Google for Web יש שני ממשקי API: HTML ו-JavaScript, שמאפשרים לבקש טענות נוספות. לדוגמה, אפשר לבקש את auth_time ו-amr באמצעות JavaScript API:
<html>
<body>
<script src="https://accounts.google.com/gsi/client" async></script>
<script>
window.onload = function () {
google.accounts.id.initialize({
client_id: "YOUR_WEB_CLIENT_ID",
callback: function(rsp) { console.log(rsp.credential); },
essential_claims: "auth_time, amr",
});
google.accounts.id.renderButton(
document.getElementById("buttonDiv"),
{ type: "standard", size: "large" }
);
}
</script>
<div id="buttonDiv"></div>
</body>
</html>מידע נוסף זמין במאמר בנושא כניסה באמצעות חשבון Google לאינטרנט.
GIS ל-Android
משתמשים בשיטת setClaims ובאובייקט Claim כדי לבקש auth_time ו-amr.
כדי להשתמש בגרסאות העדכניות ביותר של הספריות androidx.credentials:credentials-play-services-auth ו-com.google.android.libraries.identity.googleid:googleid, צריך לעדכן את יחסי התלות של ה-build.
יוצרים מופע של אובייקטים מסוג auth_time ו-amr באמצעות setClaims כדי להוסיף אותם לרשימת אפשרויות הכניסה:Claim
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder() .setAutoSelectEnabled(true) .setFilterByAuthorizedAccounts(true) .setServerClientId(WEB_CLIENT_ID) .setNonce("NONCE") .setClaims(ImmutableList.of( new Claim("auth_time", true), new Claim("amr", true) )) .build()
מידע נוסף זמין במאמר אימות משתמשים באמצעות כניסה באמצעות חשבון Google.
iOS
Sign in with Google SDK ל-iOS מוסיף אובייקט authTimeClaim ופרמטר claims למחלקה GIDSignIn שמשמשת לבקשה אופציונלית של auth_time ושל amr.
אפליקציות שמשתמשות ב-ASWebAuthenticationSession מעדכנות קובץ Cookie משותף שזמין לכל האפליקציות במכשיר. GIDSignIn משתמשת בשיטה הזו כברירת מחדל ב-iOS גרסה 12 ואילך וב-macOS גרסה 10.15 ואילך. בתרחיש הזה, משתמש שנכנס לחשבון Google שלו עובר אימות והסשן נשמר בקובץ ה-Cookie המשותף. כאן auth_time הוא האימות האחרון של המשתמש ב-Google במכשיר, ולא רק באפליקציה שלכם.
SFSafariViewController, WKWebView ו-UIWebView פועלים בארגזי חול מבודדים בתוך האפליקציה, לכן מומלץ להימנע משימוש בהם כשמשתמשים ב-auth_time. הערך auth_time מייצג את הכניסה האחרונה של המשתמש לאפליקציה עצמה, ולכן הוא תמיד עדכני ופחות משמעותי.
כדי לבקש auth_time, צריך לעדכן את התלויות של GoogleSignIn לגרסה האחרונה וליצור אובייקט authTimeClaim, ולהוסיף אותו לקבוצת claims.
כדי לבקש amr ליצור אובייקט amrClaim ולהוסיף אותו לקבוצה claims.
Swift
מוסיפים את קבוצת הטענות לשיטה GIDSignIn.sharedInstance.signIn:
let authTimeClaim = GIDClaim.authTime() let amrClaim = GIDClaim.amr() let claims = Set([authTimeClaim, amrClaim])// Start the sign-in process GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController, claims: claims ) { signInResult, error in guard let result = signInResult else { print("Error signing in: (error?.localizedDescription ?? "No error description")") return } // If sign in succeeded, display the app's main content View print("ID Token: (result.user.idToken?.tokenString ?? "No token")") }
Objective-C
מוסיפים את קבוצת הטענות לשיטה signInWithPresentingViewController:
GIDClaim *authTimeClaim = [GIDClaim authTimeClaim]; GIDClaim *AMRClaim = [GIDClaim AMRClaim]; NSSet *claims = [NSSet setWithArray:@[authTimeClaim, AMRClaim]];// Include the claims set and start the sign-in process [GIDSignIn.sharedInstance signInWithPresentingViewController:self hint:nil claims:claims completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { // On success signInResult.user.idToken // contains the requested claims. }];
מידע נוסף זמין במאמר שילוב של כניסה לחשבון Google באפליקציית iOS או macOS.
תשובות
אם התלונות auth_time או amr נכללות בבקשה, הן מוחזרות בתגובה של מטען הנתונים של אסימון המזהה לצד תלונות רגילות אחרות כמו iss (מנפיק), sub (נושא), aud (קהל) ו-exp (זמן התפוגה).
הסיבה הסבירה ביותר לכך שטענות חסרות היא שהאפליקציה לא אומתה או שהגדרות נוספות מושבתות (זו הגדרת ברירת המחדל). כדי לוודא שמזהה הלקוח והאפליקציה נמצאים בשימוש מאומת ושהטענות הנוספות מופעלות, צריך לפעול לפי ההוראות שבקטע הגדרה.
הערך של הטענה auth_time הוא מספר בפורמט JSON שמייצג את מספר השניות שחלפו מאז ראשית זמן יוניקס (1 בינואר 1970, 00:00:00 UTC) ועד למועד האחרון שבו בוצע אימות של המשתמש.
הערך של הטענה amr הוא מערך JSON של מחרוזות שמייצגות את שיטות האימות ששימשו במהלך אירוע הכניסה האחרון לחשבון Google.
זו דוגמה לטוקן מזהה מפוענח שכולל את התביעות auth_time ו-amr:
{ "iss": "https://accounts.google.com", "azp": "YOUR_CLIENT_ID", "aud": "YOUR_CLIENT_ID", "sub": "117726431651943698600", "email": "alice@example.com", "email_verified": true, "nonce": "123-456-7890", "auth_time": 1748875426, "amr": ["mfa", "pwd", "tel"], "nbf": 1748880889, "name": "Elisa Beckett", "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c", "given_name": "Elisa", "family_name": "Beckett", "iat": 1748881189, "exp": 1748884789, "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1" }
האסימון המזהה מכיל גם את ההצהרה iat (הונפק בתאריך), שמציינת את השעה שבה הונפק ה-JWT. על ידי השוואה בין הצהרות iat ו-auth_time, אפשר לקבוע את הזמן שחלף מאז האימות האחרון של המשתמש ביחס למועד שבו נוצר אסימון המזהה הספציפי. לדוגמה, אם iat הוא 1748881189 ו-auth_time הוא 1748875426, ההפרש הוא 5, 763 שניות, שמייצגות שעה אחת, 36 דקות ו-3 שניות של זמן שחלף.