ביטול קישור של חשבונות

יכול להיות שהניתוק יתבצע מהפלטפורמה או מ-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, חייב לכלול רק אירוע ביטול של אסימון אחד.
subject_type הערך הזה צריך להיות oauth_token.
token_type זהו סוג האסימון שמתבטל, access_token או refresh_token.
token_identifier_alg זהו האלגוריתם שמשמש לקידוד האסימון, והוא חייב להיות hash_SHA512_double
token זהו המזהה של האסימון שבוטל.

למידע נוסף על סוגים ופורמטים של שדות, אפשר לעיין במאמר JSON Web Token (JWT).