הקישור 'כניסה באמצעות חשבון Google' שמבוסס על OAuth, יוסיף את 'כניסה באמצעות חשבון Google' בנוסף לקישור החשבונות על סמך OAuth. כך משתמשי Google יכולים לקשר בצורה חלקה באמצעות קול, וגם קישור חשבונות למשתמשים שנרשמו לשירות שלכם בזהות שאינה של Google.
סוג הקישור הזה מתחיל בכניסה באמצעות חשבון Google, שמאפשרת לבדוק אם פרטי פרופיל Google של המשתמש קיימים במערכת. אם פרטי המשתמש לא נמצאים במערכת שלכם, מתחיל תהליך OAuth סטנדרטי. המשתמש יכול גם ליצור חשבון חדש עם פרטי הפרופיל שלו ב-Google.
כדי לקשר חשבון מסוג 'שיפור יעיל', פועלים לפי השלבים הכלליים הבאים:
- קודם צריך לבקש מהמשתמש להביע הסכמה לגישה לפרופיל Google שלו.
- אפשר להשתמש במידע בפרופיל שלו כדי לזהות את המשתמש.
- אם לא הצלחתם למצוא התאמה למשתמש Google במערכת האימות, התהליך ישתנה בהתאם להגדרה של פרויקט Actions (פעולות) במסוף Actions כדי לאפשר יצירת חשבונות משתמשים באמצעות הקול או רק באתר שלכם.
- אם אתם מאפשרים ליצור חשבון באמצעות הקול, עליכם לאמת את האסימון המזהה שקיבלתם מ-Google. לאחר מכן אפשר ליצור משתמש על סמך פרטי הפרופיל שכלולים באסימון המזהה.
- אם לא מאפשרים ליצור חשבון באמצעות הקול, המשתמשים מועברים לדפדפן שבו הם יכולים לטעון את דף ההרשאה ולהשלים את תהליך יצירת החשבון.
תמיכה ביצירת חשבון באמצעות הקול
כשמאפשרים יצירה של חשבון משתמש באמצעות הקול, Assistant שואלת את המשתמשים אם לבצע את הפעולות הבאות:
- ליצור חשבון חדש במערכת באמצעות פרטי חשבון Google שלהם, או
- נכנסים למערכת האימות באמצעות חשבון אחר, אם כבר יש לו חשבון שלא שייך ל-Google.
מומלץ לאפשר יצירת חשבון באמצעות הקול, כדי לצמצם את הקשיים בתהליך יצירת החשבון. המשתמש צריך לצאת מתהליך הקול רק אם הוא רוצה להיכנס באמצעות חשבון קיים שהוא לא של Google.
אי אפשר ליצור חשבון באמצעות הקול
אם לא אישרתם ליצור חשבון משתמש באמצעות הקול, Assistant תפתח את כתובת ה-URL של אתר האינטרנט שסיפקתם לצורך אימות המשתמשים. אם האינטראקציה מתבצעת במכשיר שאין בו מסך, Assistant מפנה את המשתמשים לטלפון כדי להמשיך בתהליך הקישור של החשבון.
חסימת היצירה מומלצת אם:
אתם לא רוצים לאפשר למשתמשים עם חשבונות שאינם של Google ליצור חשבון משתמש חדש, אלא לבקש מהם לקשר במקום זאת לחשבונות המשתמשים הקיימים שלהם במערכת האימות. לדוגמה, אם אתם מציעים מועדון לקוחות, מומלץ לוודא שהמשתמש לא מאבד את הנקודות שנצברו בחשבון הקיים.
צריכה להיות לכם שליטה מלאה על תהליך יצירת החשבון. לדוגמה, אפשר לא לאפשר יצירה אם צריך להציג למשתמש את התנאים וההגבלות במהלך יצירת החשבון.
הטמעה של קישור "מהיר" לכניסה באמצעות חשבון Google שמבוסס על OAuth
החשבונות מקושרים לתהליכי OAuth 2.0 המקובלים בתחום. פעולות ב-Google תומכות בתהליכי קוד הרשאה וקוד הרשאה.
בתהליך הקוד המשתמע, Google פותחת את נקודת הקצה של ההרשאה בדפדפן של המשתמש. אחרי שהכניסה לחשבון תושלם בהצלחה, תקבלו מ-Google אסימון גישה לטווח ארוך. אסימון הגישה הזה כלול עכשיו בכל בקשה שנשלחת מ-Assistant לפעולה שלך.
בתהליך הקוד של ההרשאה, נדרשות שתי נקודות קצה:
- נקודת הקצה הרשאה, שאחראית להצגת ממשק המשתמש לכניסה למשתמשים שעדיין לא נכנסו לחשבון, ולתעד הסכמה לגישה המבוקשת כקוד הרשאה לטווח קצר.
- נקודת הקצה להחלפה באסימון, שאחראית לשני סוגים של חילופי הודעות:
- החלפה של קוד הרשאה באסימון רענון לטווח ארוך ובאסימון גישה לטווח קצר. ההחלפה הזו מתרחשת כשהמשתמש עובר את התהליך של קישור החשבון.
- החלפה של אסימון רענון לטווח ארוך באסימון גישה לטווח קצר. ההחלפה הזו מתרחשת כש-Google צריכה אסימון גישה חדש, כי פג התוקף של האסימון שפג תוקפו.
אומנם קל יותר להטמיע את תהליך הקוד המשתמע, אבל ב-Google מומלץ שאף פעם לא יפוג התוקף של אסימוני גישה שהונפקו באמצעות הזרימה המשתמעת, כי השימוש בתפוגת האסימון באמצעות התהליך המשתמע מחייב לאלץ את המשתמש לקשר שוב את החשבון. אם אתם זקוקים לתפוגת תוקף של אסימון מטעמי אבטחה, כדאי מאוד להשתמש בתהליך קוד האימות במקום זאת.
הגדרת הפרויקט
כדי להגדיר בפרויקט שימוש בקישור עם אופטימיזציה, יש לבצע את השלבים הבאים:
- פותחים את מסוף הפעולות ובוחרים את הפרויקט שבו רוצים להשתמש.
- לוחצים על הכרטיסייה פיתוח ובוחרים באפשרות קישור חשבונות.
- מפעילים את המתג שלצד קישור חשבונות.
- בקטע יצירת חשבון, בוחרים באפשרות כן.
בקטע סוג הקישור, בוחרים באפשרות כניסה באמצעות OAuth ו-Google ומרומז.
בקטע פרטי הלקוח, מבצעים את הפעולות הבאות:
- כדי לזהות בקשות שמגיעות מ-Google, מקצים ערך ל-Client-ID שהונפק על ידי Actions to Google.
- עליך להזין את כתובות ה-URL של נקודות הקצה Authorization ו-Token Exchange.
לוחצים על שמירה.
הטמעה של שרת OAuth
为了支持 OAuth 2.0 隐式流程,您的服务会进行授权 端点。此端点负责 就数据访问征得用户同意。授权端点 向尚未登录的用户显示登录界面,并记录 同意所请求的访问。
当您的 Action 需要调用您的某项授权的 API 时,Google 会使用 此端点来获得用户许可,以在其上调用这些 API 。
由 Google 发起的典型 OAuth 2.0 隐式流会话具有以下特征: 以下流程:
- Google 会在用户的浏览器中打开您的授权端点。通过 如果用户尚未登录,则可以登录,并且授予 Google 访问 通过您的 API 访问其数据(如果尚未授予权限)。
- 您的服务会创建一个访问令牌并将其返回给 通过使用访问令牌将用户的浏览器重定向回 Google, 附件。
- Google 调用您的服务的 API,并使用 。您的服务会验证访问令牌是否向 Google 授予 访问 API 的授权,然后完成 API 调用。
处理授权请求
当您的 Action 需要通过 OAuth 2.0 隐式流程执行账号关联时, Google 会通过包含以下内容的请求将用户发送到您的授权端点: 以下参数:
授权端点参数 | |
---|---|
client_id |
您分配给 Google 的客户 ID。 |
redirect_uri |
此请求的响应发送到的网址。 |
state |
将一个在 重定向 URI。 |
response_type |
要在响应中返回的值的类型。对于 OAuth 2.0 隐式
则响应类型始终为 token 。 |
例如,如果您的授权端点可通过 https://myservice.example.com/auth
访问,
请求可能如下所示:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token
为了让授权端点能够处理登录请求,请执行以下步骤:
验证
client_id
和redirect_uri
值, 防止向意外或配置错误的客户端应用授予访问权限:- 确认
client_id
是否与您的客户端 ID 匹配 分配给 Google。 - 确认
redirect_uri
指定的网址 参数的格式如下:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
YOUR_PROJECT_ID 是项目设置页面上的 ID Actions 控制台界面。
- 确认
检查用户是否已登录您的服务。如果用户未登录 中,完成服务的登录或注册流程。
生成 Google 将用于访问您的 API 的访问令牌。通过 访问令牌可以是任何字符串值,但必须唯一地表示 令牌对应的用户和客户端,且不得被猜到。
发送 HTTP 响应,将用户浏览器重定向到相应网址 由
redirect_uri
参数指定。添加所有 以下参数:access_token
:您刚刚生成的访问令牌token_type
:字符串bearer
state
:原始状态的未修改状态值 请求 以下是生成的网址示例:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
Google 的 OAuth 2.0 重定向处理程序将收到访问令牌并确认
state
值没有更改。在 Google 获得
访问令牌,则 Google 会将该令牌附加到后续调用
作为 AppRequest 的一部分添加到您的 Action。
איך מטפלים בקישור האוטומטי
אחרי שהמשתמש מביע הסכמה לפעולה כדי לגשת לפרופיל שלו ב-Google, Google שולחת בקשה שמכילה טענת נכוֹנוּת (assertion) חתומה של זהות המשתמש ב-Google. טענת הנכוֹנוּת (assertion) מכילה מידע שכולל את מספר חשבון Google של המשתמש, את השם שלו וכתובת אימייל. נקודת הקצה להחלפת אסימונים שהוגדרה עבור כינויי הפרויקט שלך של הבקשה.
אם חשבון Google התואם כבר קיים במערכת האימות,
נקודת הקצה (endpoint) של המרת האסימון מחזירה אסימון עבור המשתמש. אם בחשבון Google לא
תואם למשתמש קיים, נקודת הקצה של המרת האסימון תחזיר את השגיאה user_not_found
.
הבקשה מוצגת בפורמט הבא:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=get&assertion=JWT&consent_code=CONSENT_CODE&scope=SCOPES
נקודת הקצה (endpoint) של המרת האסימונים חייבת להיות מסוגלת לטפל בפרמטרים הבאים:
פרמטרים של נקודת קצה של אסימון | |
---|---|
grant_type |
סוג האסימון המוחלף. בבקשות האלה,
מכיל את הערך urn:ietf:params:oauth:grant-type:jwt-bearer . |
intent |
בבקשות האלה, הערך של הפרמטר הזה הוא 'get'. |
assertion |
אסימון רשת מבוסס JSON (JWT) שמספק טענת נכוֹנוּת (assertion) חתומה של זהות המשתמש. ה-JWT מכיל מידע שכולל את סמל Google של המשתמש מספר חשבון, שם וכתובת אימייל. |
consent_code |
אופציונלי: כשהוא קיים, קוד חד-פעמי שמציין המשתמש נתן את הסכמתו לפעולה כדי לגשת להיקפי ההרשאות שצוינו. |
scope |
אופציונלי: היקפי הרשאות שהגדרתם ש-Google תבקש ממשתמשים. |
כשנקודת הקצה של המרת אסימונים מקבלת את בקשת הקישור, היא צריכה לבצע את הבאים:
אימות ופענוח של טענת הנכוֹנוּת (assertion) של JWT
אפשר לאמת ולפענח את טענת הנכוֹנוּת (assertion) של JWT באמצעות ספריית פענוח קוד של JWT לשפה. להשתמש במפתחות הציבוריים של Google (זמינים ב-JWK או PEM) כדי לאמת את לחתימה.
אחרי הפענוח, טענת הנכוֹנוּת (assertion) של ה-JWT תיראה כמו הדוגמה הבאה:
{ "sub": 1234567890, // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "locale": "en_US" }
בנוסף לאימות החתימה של האסימון, צריך לאמת שמנפיק טענת הנכוֹנוּת (assertion)
(השדה iss
) הוא https://accounts.google.com
ושהקהל (שדה aud
)
הוא מזהה הלקוח שהוקצה לפעולה.
בודקים אם חשבון Google כבר קיים במערכת האימות
בודקים אם אחד מהתנאים הבאים מתקיים:
- מספר חשבון Google, שמופיע בשדה
sub
של טענת הנכוֹנוּת (assertion), קיים במסד הנתונים של המשתמשים. - כתובת האימייל בטענת הנכונות (assertion) תואמת למשתמש במסד הנתונים של המשתמשים.
אם אחד מהתנאים מתקיים, המשתמש כבר נרשם וניתן להנפיק אסימון גישה.
אם מספר חשבון Google או כתובת האימייל לא צוינו בטענת הנכונות (assertion)
תואם למשתמש במסד הנתונים שלכם, המשתמש עדיין לא נרשם. במקרה הזה,
נקודת הקצה (endpoint) של המרת אסימון צריכה להשיב עם שגיאת HTTP 401 שמציינת error=user_not_found
,
כמו בדוגמה הבאה:
HTTP/1.1 401 Unauthorized Content-Type: application/json;charset=UTF-8 { "error":"user_not_found", }כש-Google מקבלת את התגובה לשגיאה 401 עם השגיאה
user_not_found
,
קוראת לנקודת הקצה (endpoint) של המרת האסימון עם הערך של הפרמטר intent
מוגדר כיצירה ושליחה של אסימון מזהה שמכיל את פרטי הפרופיל של המשתמש
עם הבקשה.
איך מטפלים ביצירת החשבון דרך הכניסה באמצעות חשבון Google
כשמשתמש צריך ליצור חשבון בשירות שלך, Google יוצרת
בקשה לנקודת הקצה של המרת האסימון שמציינת
intent=create
, כמו בדוגמה הבאה:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded response_type=token&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=SCOPES&intent=create&consent_code=CONSENT_CODE&assertion=JWT[&NEW_ACCOUNT_INFO]
הפרמטר assertion
מכיל אסימון רשת מבוסס JSON (JWT) שמספק
טענת נכוֹנוּת (assertion) חתומה על זהות המשתמש ב-Google. ה-JWT מכיל מידע
שכוללות את מספר חשבון Google, השם וכתובת האימייל של המשתמש, שבהם אפשר להשתמש
כדי ליצור חשבון חדש בשירות.
כדי להגיב לבקשות ליצירת חשבון, נקודת הקצה (endpoint) של המרת האסימונים חייבת הבאים:
אימות ופענוח של טענת הנכוֹנוּת (assertion) של JWT
אפשר לאמת ולפענח את טענת הנכוֹנוּת (assertion) של JWT באמצעות ספריית פענוח קוד של JWT לשפה. להשתמש במפתחות הציבוריים של Google (זמינים ב-JWK או PEM) כדי לאמת את לחתימה.
אחרי הפענוח, טענת הנכוֹנוּת (assertion) של ה-JWT תיראה כמו הדוגמה הבאה:
{ "sub": 1234567890, // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "locale": "en_US" }
בנוסף לאימות החתימה של האסימון, צריך לאמת שמנפיק טענת הנכוֹנוּת (assertion)
(השדה iss
) הוא https://accounts.google.com
ושהקהל (שדה aud
)
הוא מזהה הלקוח שהוקצה לפעולה.
אימות פרטי המשתמש ויצירת חשבון חדש
בודקים אם אחד מהתנאים הבאים מתקיים:
- מספר חשבון Google, שמופיע בשדה
sub
של טענת הנכוֹנוּת (assertion), קיים במסד הנתונים של המשתמשים. - כתובת האימייל בטענת הנכונות (assertion) תואמת למשתמש במסד הנתונים של המשתמשים.
אם אחד מהתנאים מתקיים, מבקשים מהמשתמש לקשר את החשבון הקיים עם
לחשבון Google שלהם, על ידי שליחת תגובה לבקשה עם שגיאת HTTP 401, וציון
error=linking_error
וכתובת האימייל של המשתמש כ-login_hint
, כמו ב-
בדוגמה הבאה:
HTTP/1.1 401 Unauthorized Content-Type: application/json;charset=UTF-8 { "error":"linking_error", "login_hint":"foo@bar.com" }
אם אף אחד מהתנאים לא מתקיים, צריך ליצור חשבון משתמש חדש באמצעות המידע הזה שצוינו ב-JWT. לחשבונות חדשים בדרך כלל לא מוגדרת סיסמה. זה כן מומלץ להוסיף כניסה באמצעות חשבון Google לפלטפורמות אחרות כדי לאפשר למשתמשים להתחבר דרך Google בפלטפורמות השונות של האפליקציה שלכם. לחלופין, אפשר לשלוח למשתמש קישור שמתחיל בתהליך שחזור הסיסמה כדי לאפשר לו להגדיר סיסמה לכניסה בפלטפורמות אחרות.
כשהיצירה הושלמה, צריך להנפיק אסימון גישה ומחזירים את הערכים באובייקט JSON הגוף של תגובת ה-HTTPS, כמו בדוגמה הבאה:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
עיצוב ממשק המשתמש הקולי לתהליך האימות
בודקים אם המשתמש מאומת ומתחילים בתהליך קישור החשבון
- פותחים את הפרויקט ב-Actions Builder ב-Actions Console.
- יוצרים סצנה חדשה כדי להתחיל את קישור החשבונות בפעולה:
- לוחצים על סצנות.
- לוחצים על הסמל הוספה (+) כדי להוסיף סצנה חדשה.
- בסצנה החדשה שנוצרה, לוחצים על סמל ההוספה add של Conditions.
- אפשר להוסיף תנאי שבודק אם המשתמש שמשויך לשיחה הוא משתמש מאומת. אם הבדיקה נכשלת, הפעולה לא יכולה לבצע קישור חשבונות במהלך השיחה. במקום זאת, אתם אמורים לקבל גישה לפונקציונליות שלא מחייבת קישור חשבונות.
- בשדה
Enter new expression
בקטע תנאי, מזינים את הלוגיקה הבאה:user.verificationStatus != "VERIFIED"
- בקטע Transition, בוחרים סצנה שלא מחייבת קישור של חשבונות, או סצנה שהיא נקודת הכניסה לפונקציונליות לאורחים בלבד.
- בשדה
- לוחצים על סמל ההוספה add עבור תנאים.
- אפשר להוסיף תנאי שמפעיל תהליך של קישור חשבון אם למשתמש
לא משויכת זהות.
- בשדה
Enter new expression
בקטע תנאי, מזינים את הלוגיקה הבאה:user.verificationStatus == "VERIFIED"
- בקטע מעבר, בוחרים בסצנה של המערכת קישור חשבונות.
- לוחצים על שמירה.
- בשדה
אחרי השמירה, תתווסף לפרויקט סצנה חדשה של מערכת קישור חשבונות בשם <SceneName>_AccountLinking
.
התאמה אישית של הסצנה של קישור החשבונות
- בקטע סצנות, בוחרים את סצנת המערכת לקישור החשבונות.
- לוחצים על שליחת בקשה ומוסיפים משפט קצר שיתאר למשתמש למה הפעולה צריכה לגשת לזהות שלו (לדוגמה, 'כדי לשמור את ההעדפות שלך').
- לוחצים על שמירה.
- בקטע תנאים, לוחצים על אם המשתמש השלים את קישור החשבון.
- יש להגדיר את המשך התהליך אם המשתמש מסכים לקשר את החשבון שלו. לדוגמה, אפשר לקרוא ל-webhook כדי לעבד כל לוגיקה עסקית מותאמת אישית שנדרשת ולחזור לסצנת המקור.
- לוחצים על שמירה.
- בקטע תנאים, לוחצים על אם המשתמש מבטל או סוגר קישור חשבונות.
- מגדירים את הפעולות שהמשתמשים צריכים לבצע אם הם לא מסכימים לקשר את החשבון. לדוגמה, שלחו הודעה תודה והפנו את המשתמשים לסצנות עם פונקציונליות שלא מחייבת קישור חשבונות.
- לוחצים על שמירה.
- בקטע תנאים, לוחצים על אם מתרחשת שגיאת מערכת או רשת.
- אתם יכולים להגדיר איך להמשיך בתהליך אם לא ניתן להשלים את תהליך קישור החשבונות בגלל שגיאות מערכת או רשת. לדוגמה, שלחו הודעה תודה והפנו את המשתמשים לסצנות עם פונקציונליות שלא מחייבת קישור חשבונות.
- לוחצים על שמירה.
טיפול בבקשות גישה לנתונים
אם הבקשה מ-Assistant מכילה אסימון גישה, קודם צריך לוודא שאסימון הגישה תקין ובתוקף, ואז לאחזר ממסד הנתונים של חשבונות המשתמש את חשבון המשתמש שמשויך לאסימון.