קישור יעיל באמצעות OAuth וכניסה באמצעות חשבון Google

סקירה כללית

כניסה באמצעות חשבון Google מבוססת-OAuth עם קישור יעיל מוסיפה כניסה באמצעות חשבון Google על גבי קישור OAuth. הקישור הזה מאפשר למשתמשי Google ליהנות מחוויית קישור חלקה, וגם ליצור חשבון חדש בשירות שלכם באמצעות חשבון Google שלהם.

כדי לבצע קישור חשבונות באמצעות OAuth ו'כניסה באמצעות חשבון Google', פועלים לפי השלבים הכלליים הבאים:

  1. קודם כל, צריך לבקש מהמשתמש לתת הסכמה לגישה לפרופיל ב-Google.
  2. משתמשים במידע בפרופיל כדי לבדוק אם חשבון המשתמש קיים.
  3. למשתמשים קיימים, מקשרים את החשבונות.
  4. אם לא מצאתם התאמה למשתמש Google במערכת האימות שלכם, צריך לאמת את אסימון הזהות שהתקבל מ-Google. לאחר מכן תוכלו ליצור משתמש על סמך פרטי הפרופיל שכלולים באסימון המזהה.
איור שמראה את השלבים שמשתמש צריך לבצע כדי לקשר את חשבון Google שלו באמצעות תהליך הקישור הפשוט. בצילום המסך הראשון אפשר לראות איך משתמש יכול לבחור את האפליקציה שלכם לקישור. בצילום המסך השני, המשתמש יכול לאשר אם יש לו חשבון קיים בשירות שלכם או לא. בצילום המסך השלישי, המשתמש יכול לבחור את חשבון Google שהוא רוצה לקשר. בצילום המסך הרביעי מוצג אישור לקישור חשבון Google לאפליקציה. בצילום המסך החמישי מוצג חשבון משתמש שקושר בהצלחה באפליקציית Google.
קישור חשבון בטלפון של משתמש באמצעות קישור פשוט

איור 1. קישור חשבון בטלפון של משתמש באמצעות קישור פשוט

קישור יעיל: תהליך OAuth + כניסה באמצעות חשבון Google

תרשים הרצף הבא מציג את האינטראקציות בין המשתמש, Google ונקודת הקצה של חילופי הטוקנים שלכם לקישור פשוט.

משתמש אפליקציית Google / שרת הטוקן שלך נקודת קצה של חילופי מידע ה-API שלך 1. המשתמש יוזם את הקישור 2. שליחת בקשה להפעלת התכונה 'כניסה באמצעות חשבון Google' 3. Sign in with Google 4. check intent (JWT Assertion) 5. account_found: true/false If account found: 6. get intent If no account: 6. create intent 7. access_token, refresh_token 8. טוקנים של משתמשים בחנות 9. גישה למשאבי משתמשים
איור 2. רצף האירועים בתהליך של קישור יעיל
.

תפקידים ותחומי אחריות

בטבלה הבאה מוגדרים התפקידים ותחומי האחריות של הגורמים בתהליך המקוצר של קישור החשבונות.

המשתמש / הרכיב תפקיד ב-GAL תחומי אחריות
אפליקציית Google / שרת לקוח OAuth מקבל את הסכמת המשתמש לכניסה באמצעות חשבון Google, מעביר הצהרות זהות (JWT) לשרת שלכם ושומר בצורה מאובטחת את הטוקנים שנוצרו.
נקודת הקצה של חילופי הטוקנים ספק זהויות / שרת הרשאות מאמת את הצהרות הזהות, בודק אם יש חשבונות קיימים, מטפל בכוונות לקישור חשבונות (check,‏ get,‏ create) ומנפיק טוקנים על סמך הכוונות המבוקשות.
Your Service API שרת משאבים מאפשר גישה לנתוני משתמש כשמוצג אסימון גישה תקין.

הדרישות לקישור פשוט

לוגיקה של החלטות לקישור יעיל

הלוגיקה הבאה קובעת איך מתבצעות קריאות לכוונות במהלך תהליך הקישור הפשוט:

  1. האם למשתמש יש חשבון במערכת האימות שלכם? (המשתמש מחליט על ידי בחירה באפשרות 'כן' או 'לא')
    1. כן : המשתמש משתמש בכתובת האימייל שמשויכת לחשבון Google שלו כדי להיכנס לפלטפורמה שלכם. (המשתמש מחליט על ידי בחירה באפשרות 'כן' או 'לא')
      1. כן : האם למשתמש יש חשבון תואם במערכת האימות שלכם? (מתקשרים אל check intent כדי לאשר)
        1. ‫YES : מתקשרים אל get intent והחשבון מקושר אם הכוונה מוחזרת בהצלחה.
        2. לא : ליצור חשבון חדש? (המשתמש מחליט על ידי בחירה באפשרות 'כן' או 'לא')
          1. כן : מתבצעת קריאה אל create intent והחשבון מקושר אם כוונת היצירה מוחזרת בהצלחה.
          2. לא : תהליך הקישור באמצעות OAuth מופעל, המשתמש מועבר לדפדפן שלו ומוצגת לו האפשרות לקשר עם כתובת אימייל אחרת.
      2. לא : מופעל תהליך הקישור באמצעות OAuth, המשתמש מועבר לדפדפן שלו ומוצגת לו האפשרות לקשר עם כתובת אימייל אחרת.
    2. לא : האם למשתמש יש חשבון תואם במערכת האימות שלך? (מתקשרים אל check intent כדי לאשר)
      1. ‫YES : מתקשרים אל get intent והחשבון מקושר אם הכוונה מוחזרת בהצלחה.
      2. לא : מתבצעת קריאה אל create intent והחשבון מקושר אם הכוונה ליצור חוזרת בהצלחה.

מתכון להטמעה

נקודת הקצה של חילופי הטוקנים צריכה להטמיע את ה-Intents check, get ו-create כדי לתמוך בקישור פשוט.

כדי לטפל בכוונות השונות:

检查现有用户账号(检查 intent)

Google 会调用您的令牌交换端点,以验证 Google 用户是否存在于您的系统中。如需了解参数详情,请参阅简化的关联 intent

实现方案

如需处理 check intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type(必须为 urn:ietf:params:oauth:grant-type:jwt-bearer)。
    • 使用 JWT 验证 中的条件验证 assertion (JWT)。
  2. 查找用户

    • 检查 JWT 中的 Google 账号 ID (sub) 或电子邮件地址是否与数据库中的用户匹配。
  3. 回应

    • 如果找到:返回 HTTP 200 OK,并附带 {"account_found": "true"}
    • 如果未找到:返回 HTTP 404 Not Found,并附带 {"account_found": "false"}

处理自动关联(获取 intent)

如果该账号存在,Google 会使用 intent=get 调用您的端点以检索令牌。如需了解参数详情,请参阅简化的关联 intent

实施方案

如需处理 get intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type
    • 验证 assertion (JWT)。
  2. 查找用户

    • 使用 subemail 声明验证用户是否存在。
  3. 回应

    • 如果成功:在 JSON 响应 (HTTP 200 OK) 中生成并返回 access_tokenrefresh_tokenexpires_in
    • 如果关联失败:返回 HTTP 401 Unauthorized,其中包含 {"error": "linking_error"} 和可选的 login_hint,以便回退到标准 OAuth 关联。

使用“使用 Google 账号登录”功能处理账号创建事宜(创建 intent)

如果不存在任何账号,Google 会使用 intent=create 调用您的端点,以创建新用户。如需了解参数详情,请参阅 Streamlined Linking Intents

实现方案

如需处理 create intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type
    • 验证 assertion (JWT)。
  2. 验证用户不存在

    • 检查您的数据库中是否已存在 subemail
    • 如果用户 存在,请返回 HTTP 401 Unauthorized,并使用 {"error": "linking_error", "login_hint": "USER_EMAIL"} 强制回退到 OAuth 关联。
  3. 创建账号

    • 使用 JWT 中的 subemailnamepicture 声明创建新的用户记录。
  4. 回应

    • 在 JSON 响应 (HTTP 200 OK) 中生成并返回令牌。

איך מקבלים את מזהה הלקוח ב-Google API

תצטרכו לספק את מזהה הלקוח של Google API במהלך תהליך ההרשמה לקישור החשבון. כדי לקבל את מזהה הלקוח של ה-API באמצעות הפרויקט שיצרתם במהלך השלבים של קישור OAuth. כדי לעשות זאת, מבצעים את השלבים הבאים:

  1. עוברים אל דף הלקוחות.
  2. יוצרים פרויקט ב-Google APIs או בוחרים פרויקט קיים.

    אם בפרויקט שלכם אין מזהה לקוח מסוג אפליקציית אינטרנט, לוחצים על יצירת לקוח כדי ליצור אחד. חשוב להוסיף את הדומיין של האתר לתיבה מקורות מורשים של JavaScript. כשמבצעים בדיקות מקומיות או פיתוח, צריך להוסיף את http://localhost ואת http://localhost:<port_number> לשדה מקורות JavaScript מורשים.

אימות ההטמעה

您可以使用 OAuth 2.0 Playground 工具验证您的实现。

在该工具中,执行以下步骤:

  1. 点击配置 以打开“OAuth 2.0 配置”窗口。
  2. OAuth flow(OAuth 流程)字段中,选择 Client-side(客户端)。
  3. OAuth Endpoints 字段中,选择 Custom
  4. 在相应字段中指定您的 OAuth 2.0 端点以及您分配给 Google 的客户端 ID。
  5. 第 1 步部分中,请勿选择任何 Google 范围。请将此字段留空,或输入适用于您服务器的范围(如果您不使用 OAuth 范围,则输入任意字符串)。完成后,点击 Authorize APIs
  6. 第 2 步第 3 步部分中,完成 OAuth 2.0 流程,并验证每个步骤是否按预期运行。

您可以使用 Google 账号关联演示工具验证您的实现。

在该工具中,执行以下步骤:

  1. 点击使用 Google 账号登录按钮。
  2. 选择您要关联的账号。
  3. 输入服务 ID。
  4. (可选)输入您将请求访问的一个或多个范围。
  5. 点击开始演示
  6. 当系统提示时,请确认您可以同意或拒绝关联请求。
  7. 确认您已重定向到相应平台。