במדריך הזה מתוארת קבוצה של תכונות שמחזירות אותות נוספים של מהימנות לגבי חשבון Google. אותות האמון האלה עוזרים למערכת לניהול החשבון לקבל החלטות מבוססות-סיכון במהלך ההרשמה, יצירת החשבון ומאוחר יותר עבור משתמשים חוזרים.
הגדרה
כדי לקבל טענות נוספות, האפליקציה צריכה להיות מפורסמת, מאומתת ותכונות חבילת האבטחה צריכות להיות מופעלות.
כדי לוודא שהאפליקציה פורסמה ואומתה:
- פתיחה של פלטפורמת האימות של Google
- בחירה או יצירה של פרויקט לאפליקציה
- בתפריט, לוחצים על קהל.
- מוודאים שסטטוס הפרסום הוא בשלב הייצור
- בתפריט, לוחצים על מרכז האימות.
מוודאים שסטטוס האימות הוא מאומת.
מידע נוסף זמין במרכז העזרה בנושא אימות אפליקציות OAuth.
כדי להפעיל את הטענה auth_time:
- פתיחה של פלטפורמת האימות של Google
- בחירה או יצירה של פרויקט לאפליקציה
- לוחצים על הגדרות בתפריט.
- בקטע הגדרות מתקדמות, בוחרים באפשרות טענות לגבי גיל הסשן כדי להפעיל את
auth_time.
תכונות נתמכות
בקטע הזה מפורטות התכונות השונות שכלולות בחבילת האבטחה.
auth_time
הצהרת auth_time היא חלק סטנדרטי בפרוטוקול OpenID Connect, והיא מספקת מידע על הפעם האחרונה שבה משתמש הקצה עבר אימות ב-Google. זהו מספר בפורמט JSON שמייצג את מספר השניות שחלפו מאז ראשית זמן יוניקס (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
השיטה הספציפית שבה משתמשים כדי לבקש את הטענה auth_time משתנה בהתאם ל-API שבו משתמשים, אבל כל API כולל פרמטר אופציונלי claims כדי לבקש את הטענה auth_time.
פרוטוקול OIDC
כשמשתמשים בפלטפורמת OAuth ישירות, מבקשים את auth_time על ידי הוספתו לפרמטר האופציונלי של בקשת הטענות. מגדירים את הערך של השדה id_token באובייקט JSON של הטענות בתור {"auth_time":{"essential":true}}. לדוגמה,
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}}}
מידע נוסף זמין במאמר בנושא OpenID Connect.
GIS for Web
לספרייה Sign in with Google for Web יש שני ממשקי API: HTML ו-JavaScript, שמאפשרים לבקש טענות נוספות. לדוגמה, בקשה auth_time באמצעות 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",
});
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.
כדי להשתמש בגרסאות העדכניות של הספריות androidx.credentials:credentials-play-services-auth ו-com.google.android.libraries.identity.googleid:googleid, צריך לעדכן את יחסי התלות של ה-build.
יוצרים מופע של אובייקט Claim מסוג auth_time באמצעות setClaims כדי להוסיף אותו לאפשרויות הכניסה:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder() .setAutoSelectEnabled(true) .setFilterByAuthorizedAccounts(true) .setServerClientId(WEB_CLIENT_ID) .setNonce("NONCE") .setClaims(ImmutableList.of(new Claim("auth_time", true))) .build()
מידע נוסף זמין במאמר אימות משתמשים באמצעות כניסה באמצעות חשבון Google.
auth_time response
כשהתלונה auth_time כלולה בבקשה, היא מופיעה בתגובת מטען ה-ID
Token לצד תלונות סטנדרטיות אחרות כמו iss (מנפיק),
sub (נושא), aud (קהל) ו-exp (זמן תפוגה). הערך של הטענה auth_time הוא מספר JSON שמייצג את מספר השניות שחלפו מאז ראשית זמן יוניקס (1 בינואר 1970, 00:00:00 UTC) ועד למועד שבו התרחש לאחרונה אימות של המשתמש. זו דוגמה לטוקן מזהה מפוענח
שכולל את הטענה auth_time:
{ "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, "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 שניות של זמן שחלף.