יכול להיות שהניתוק יתבצע מהפלטפורמה או מ-Google, והצגת מצב קישור עקבי בשני המקומות תספק את חוויית המשתמש הטובה ביותר. תמיכה בנקודת קצה לביטול טוקן או בהגנה על כל החשבונות היא אופציונלית לקישור חשבונות Google.
הקישור בין החשבונות יכול להתבטל בגלל אחת מהסיבות הבאות:
- בקשת משתמש מאת
- אפליקציה של Google או הגדרות של חשבון Google
- הפלטפורמה שלכם
- חידוש של אסימון רענון שפג תוקפו נכשל
- אירועים אחרים שאתם או Google יזמתם. לדוגמה, השעיה של חשבון על ידי שירותים לזיהוי התנהלות פוגעת ואיומים.
המשתמש ביקש לבטל את הקישור ל-Google
ביטול הקישור לחשבון שמתבצע דרך חשבון Google של המשתמש או דרך האפליקציה מוחק את כל אסימוני הגישה והרענון שהונפקו בעבר, מסיר את הסכמת המשתמש ובאופן אופציונלי קורא לנקודת הקצה של ביטול האסימון אם בחרתם להטמיע אותה.
המשתמש ביקש לבטל את הקישור לפלטפורמה שלך
מומלץ לספק למשתמשים מנגנון לביטול הקישור, כמו כתובת URL לחשבון שלהם. אם אתם לא מציעים למשתמשים דרך לנתק את הקישור, אתם צריכים לכלול קישור לחשבון Google כדי שהמשתמשים יוכלו לנהל את החשבון המקושר שלהם.
אתם יכולים להטמיע את התכונה 'שיתוף ותיאום של סיכונים ותקריות' (RISC) ולעדכן את Google לגבי שינויים בסטטוס הקישור של חשבון המשתמש. כך אפשר לשפר את חוויית המשתמש, כי גם הפלטפורמה שלכם וגם Google מציגות סטטוס קישור עדכני ועקבי בלי להסתמך על רענון או על בקשה של אסימון גישה כדי לעדכן את סטטוס הקישור.
תוקף הטוקן
כדי לספק חוויית משתמש חלקה ולמנוע שיבושים בשירות, Google מנסה לחדש את טוקני הרענון לקראת סוף תקופת התוקף שלהם. במקרים מסוימים, יכול להיות שתידרש הסכמה מהמשתמש כדי לקשר מחדש חשבונות כשאין אסימון רענון תקף.
תכנון הפלטפורמה כך שתתמוך בכמה אסימוני גישה ורענון שלא פג תוקפם יכול לצמצם את התנאים התחרותיים שקיימים בחילופי נתונים בין לקוח לשרת בסביבות מקובצות, למנוע שיבושים אצל המשתמשים ולצמצם תרחישים מורכבים של תזמון וטיפול בשגיאות. למרות שהם עקביים בסופו של דבר, יכול להיות שגם טוקנים קודמים וגם טוקנים חדשים שתוקפם לא פג יהיו בשימוש למשך תקופה קצרה במהלך החלפת הטוקנים בין הלקוח לשרת ולפני הסנכרון של האשכול. לדוגמה, בקשה של Google לשירות שלכם שמשתמשת באסימון הגישה הקודם שלא פג תוקפו מתרחשת מיד אחרי שאתם מנפיקים אסימון גישה חדש, אבל לפני שמתבצעת קבלה וסנכרון של האשכול ב-Google. מומלץ להשתמש באמצעי אבטחה חלופיים במקום רענון מחזורי של אסימוני גישה.
אירועים אחרים
יכולות להיות סיבות שונות לביטול הקישור של חשבונות, כמו חוסר פעילות, השעיה, התנהגות זדונית וכו'. במקרים כאלה, הפלטפורמה ו-Google יכולות לנהל בצורה הטובה ביותר את חשבונות המשתמשים ולקשר מחדש את החשבונות על ידי שליחת הודעות אחת לשנייה על שינויים במצב החשבון והקישור.
צריך להטמיע נקודת קצה לביטול טוקנים ש-Google יכולה לשלוח אליה קריאה, ולהודיע ל-Google על אירועי ביטול הטוקנים באמצעות RISC כדי לוודא שהפלטפורמה ו-Google ישמרו על מצב עקבי של קישור חשבון המשתמש.
נקודת הקצה לביטול הטוקן
אם אתם תומכים בנקודת קצה לביטול טוקנים מסוג OAuth 2.0, הפלטפורמה שלכם יכולה לקבל התראות מ-Google. כך תוכלו ליידע את המשתמשים על שינויים במצב הקישור, לבטל אסימון ולנקות את פרטי הכניסה לאבטחה ואת הרשאות הגישה.
הבקשה נראית כך:
POST /revoke HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&token=TOKEN&token_type_hint=refresh_token
נקודת הקצה לביטול הטוקן צריכה להיות מסוגלת לטפל בפרמטרים הבאים:
| פרמטרים של נקודת קצה לביטול | |
|---|---|
client_id |
מחרוזת שמזהה את מקור הבקשה כ-Google. המחרוזת הזו צריכה להיות רשומה במערכת שלכם כמזהה הייחודי של Google. |
client_secret |
מחרוזת סודית שרשמתם ב-Google לשירות שלכם. |
token |
הטוקן שיש לבטל. |
token_type_hint |
(אופציונלי) סוג האסימון שמבוטל, access_token או refresh_token. אם לא מציינים ערך, ברירת המחדל היא access_token. |
החזרת תגובה כשהטוקן נמחק או לא תקין. דוגמה:
HTTP/1.1 200 Success Content-Type: application/json;charset=UTF-8
אם אי אפשר למחוק את האסימון מסיבה כלשהי, צריך להחזיר קוד תגובה 503, כמו בדוגמה הבאה:
HTTP/1.1 503 Service Unavailable Content-Type: application/json;charset=UTF-8 Retry-After: HTTP-date / delay-seconds
Google תנסה שוב לשלוח את הבקשה מאוחר יותר או לפי בקשת Retry-After.
הגנה על כל החשבונות (RISC)
אם יש תמיכה בהגנה על כל החשבונות, הפלטפורמה יכולה להודיע ל-Google אסימוני גישה או רענון מבוטלים. המצב הזה מאפשר ל-Google להודיע למשתמשים על שינויים במצב הקישור, ביטול התוקף של האסימון, ניקוי פרטי כניסה מאובטחים להעניק הרשאה.
ההגנה על כל החשבונות מבוססת על תקן RISC שפיתחנו בסיס OpenID.
אסימון של אירוע אבטחה משמש כדי להודיע ל-Google על ביטול האסימון.
אחרי הפענוח, אירוע של ביטול אסימון ייראה כמו בדוגמה הבאה:
{
"iss":"http://risc.example.com",
"iat":1521068887,
"aud":"google_account_linking",
"jti":"101942095",
"toe": "1508184602",
"events": {
"https://schemas.openid.net/secevent/oauth/event-type/token-revoked":{
"subject_type": "oauth_token",
"token_type": "refresh_token",
"token_identifier_alg": "hash_SHA512_double",
"token": "double SHA-512 hash value of token"
}
}
}
אסימונים לאירועי אבטחה שבהם משתמשים כדי להודיע ל-Google על אירועים של ביטול אסימונים חייבות לעמוד בדרישות שבטבלה הבאה:
| אירועי ביטול אסימונים | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
iss |
תלונה על ידי המנפיק: זו כתובת ה-URL שאתם מארחים, והיא משותפת איתה Google במהלך הרישום. | ||||||||||
aud |
תביעת בעלות על קהל: מזהה את Google בתור הנמען של ה-JWT. הוא
חייב להיות מוגדר ל-google_account_linking. |
||||||||||
jti |
הצהרת בעלות על מזהה JWT: זהו מזהה ייחודי שאתם יוצרים לכל אסימון של אירוע אבטחה. | ||||||||||
iat |
נרשמה במסגרת התלונה: זהו ערך מסוג NumericDate
שמייצג את השעה שבה נוצר האסימון של אירוע אבטחה. |
||||||||||
toe |
מועד התלונה על האירוע: האפשרות הזו אופציונלית
ערך של NumericDate שמייצג את השעה שבה
האסימון בוטל. |
||||||||||
exp |
תלונה עם מועד תפוגה: אל תכללו את השדה הזה, כי האירוע שהוביל להודעה הזו כבר התרחש. | ||||||||||
events |
|
||||||||||
למידע נוסף על סוגים ופורמטים של שדות, אפשר לעיין במאמר JSON Web Token (JWT).