במדריך הזה מתוארת קבוצה של תכונות שמחזירות אותות נוספים של מהימנות לגבי חשבון 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.
iOS
Sign in with Google SDK ל-iOS מוסיף אובייקט authTimeClaim ופרמטר claims למחלקה GIDSignIn שמשמשת לבקשת auth_time באופן אופציונלי.
אפליקציות שמשתמשות ב-ASWebAuthenticationSession מעדכנות קובץ Cookie משותף שזמין לכל האפליקציות במכשיר. GIDSignIn משתמש בשיטה הזו כברירת מחדל ב-iOS מגרסה 12 ואילך וב-macOS מגרסה 12.16 ואילך. בתרחיש הזה, משתמש שנכנס לחשבון Google שלו מאומת והסשן מאוחסן במאגר קובצי ה-Cookie המשותף.
כאן auth_time מוצג האימות האחרון של המשתמש ב-Google במכשיר, לא רק באפליקציה שלכם.
SFSafariViewController, WKWebView ו-UIWebView פועלים בארגזי חול מבודדים בתוך האפליקציה, לכן מומלץ להימנע משימוש בהם כשמשתמשים ב-auth_time. הערך כאן
auth_time מייצג את הכניסה האחרונה של המשתמש לאפליקציה עצמה, ולכן הוא תמיד עדכני ופחות משמעותי.
כדי לבקש auth_time, צריך לעדכן את התלויות של GoogleSignIn לגרסה האחרונה וליצור אובייקט authTimeClaim, ולהוסיף אותו לקבוצת claims.
Swift
מוסיפים את קבוצת הטענות לשיטה GIDSignIn.sharedInstance.signIn:
let authTimeClaim = GIDClaim.authTime() let claims = Set([authTimeClaim])// 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]; NSSet *claims = [NSSet setWithObject:authTimeClaim];// 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 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 שניות של זמן שחלף.