קישור לחשבון Google מאפשר לבעלי חשבון Google להתחבר לשירותים שלכם ולשתף נתונים עם Google במהירות, בצורה חלקה ובטוחה.
כניסה באמצעות חשבון מקושר מאפשרת כניסה בנגיעה אחת באמצעות חשבון Google למשתמשים שכבר קישרו את חשבון Google שלהם לשירות שלכם. כך חוויית המשתמש משתפרת, כי המשתמשים יכולים להיכנס לחשבון בלחיצה אחת, בלי להזין מחדש את שם המשתמש והסיסמה שלהם. בנוסף, היא מפחיתה את הסיכוי שמשתמשים ייצרו חשבונות כפולים בשירות שלכם.
הדרישות
כדי להטמיע את הכניסה באמצעות חשבון מקושר, אתם צריכים לעמוד בדרישות הבאות:
- יש לכם הטמעה של קישור OAuth לחשבון Google שתומכת בתהליך קוד האימות של OAuth 2.0. הטמעת OAuth חייבת לכלול את נקודות הקצה הבאות:
- נקודת קצה להרשאה לטיפול בבקשות הרשאה.
- נקודת קצה (endpoint) של אסימון לטיפול בבקשות לאסימוני גישה ולאסימוני רענון.
- userinfo endpoint כדי לאחזר פרטי חשבון בסיסיים של המשתמש המקושר, שמוצגים למשתמש במהלך תהליך הכניסה לחשבון המקושר.
- יש לכם אפליקציה ל-Android.
איך זה עובד
תנאי מוקדם : המשתמש קישר בעבר את חשבון Google שלו לחשבון שלו בשירות שלכם.
- אתם יכולים להביע הסכמה להצגת חשבונות מקושרים במהלך תהליך הכניסה בנגיעה אחת.
- למשתמש תוצג בקשה לכניסה בנגיעה אחת עם אפשרות להיכנס לשירות באמצעות החשבון המקושר שלו.
- אם המשתמש יבחר להמשיך עם החשבון המקושר, Google תשלח בקשה לנקודת הקצה של האסימון כדי לשמור קוד הרשאה. הבקשה מכילה את טוקן הגישה של המשתמש שהונפק על ידי השירות שלכם וקוד הרשאה של Google.
- מחליפים את קוד ההרשאה של Google בטוקן מזהה של Google שמכיל מידע על חשבון Google של המשתמש.
- האפליקציה מקבלת גם אסימון מזהה בסיום התהליך, ואתם מתאימים אותו למזהה המשתמש באסימון המזהה שהשרת קיבל כדי לאפשר למשתמש להיכנס לאפליקציה.
![כניסה באמצעות חשבון מקושר.](https://developer.android.com/static/identity/legacy/one-tap/images/linked-account-signin.png?hl=he)
הטמעת כניסה באמצעות חשבון מקושר באפליקציה ל-Android
כדי לתמוך בכניסה באמצעות חשבון מקושר באפליקציה ל-Android, פועלים לפי ההוראות שמפורטות במדריך להטמעה ב-Android.
טיפול בבקשות לקבלת קוד הרשאה מ-Google
Google שולחת בקשת POST לנקודת הקצה של האסימון כדי לשמור קוד הרשאה, שאתם מחליפים באסימון המזהה של המשתמש. הבקשה מכילה את טוקן הגישה של המשתמש וקוד הרשאה מסוג OAuth2 שהונפק על ידי Google.
לפני שמירת קוד ההרשאה, צריך לוודא שטוקן הגישה שהוקצה על ידכם ל-Google, שמצוין ב-client_id
.
בקשת HTTP
בקשה לדוגמה
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN
נקודת הקצה להחלפת האסימונים צריכה להיות מסוגלת לטפל בפרמטרים הבאים של הבקשה:
פרמטרים של נקודת קצה של אסימון | |
---|---|
code |
קוד הרשאה נדרש של Google OAuth2 |
client_id |
מזהה לקוח נדרש שהנפקתם ל-Google |
client_secret |
חובה סוד לקוח שהנפקת ל-Google |
access_token |
חובה: אסימון גישה שהנפקת ל-Google. הקוד הזה ישמש לקבלת ההקשר של המשתמש |
grant_type |
חובה להגדיר את הערך כ-urn:ietf:params:oauth:grant-type:reciprocal |
נקודת הקצה להחלפת האסימון צריכה להגיב לבקשת ה-POST באופן הבא:
- מוודאים שה-
access_token
הוענק ל-Google שזוהתה באמצעותclient_id
. - אם הבקשה תקינה וקוד האימות הוחלף בהצלחה באסימון מזהה של Google, צריך להשיב עם תגובה מסוג HTTP 200 (OK). אם הבקשה לא תקינה, צריך להשיב עם קוד שגיאה מסוג HTTP.
תגובת HTTP
הצלחה
החזרת קוד הסטטוס HTTP 200 OK
דוגמה לתשובה על הצלחה
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}
שגיאות
במקרה של בקשת HTTP לא חוקית, יש להשיב עם אחד מקודי השגיאה הבאים של HTTP:
קוד מצב HTTP | גוף | תיאור |
---|---|---|
400 | {"error": "invalid_request"} |
בבקשה חסר פרמטר, ולכן השרת לא יכול להמשיך לטפל בבקשה. קוד השגיאה הזה עשוי להופיע גם אם הבקשה כוללת פרמטר שאין בו תמיכה או אם יש פרמטר שחוזר על עצמו. |
401 | {"error": "invalid_request"} |
אימות הלקוח נכשל, למשל אם הבקשה מכילה מזהה לקוח או סוד לקוח לא תקינים |
401 | {"error": "invalid_token"}
הכללת האתגר של אימות WWW-Authentication: Bearer בכותרת התגובה |
אסימון הגישה של השותף לא תקין. |
403 | {"error": "insufficient_permission"}
הכללת האתגר של אימות WWW-Authentication: Bearer בכותרת התגובה |
אסימון הגישה של השותף לא מכיל את ההיקפים הנדרשים לביצוע OAuth הדדי |
500 | {"error": "internal_error"} |
שגיאה בחיבור לשרת |
תגובת השגיאה צריכה להכיל את השדות הבאים :
שדות התגובה לשגיאות | |
---|---|
error |
מחרוזת שגיאה חובה |
error_description |
תיאור קריא של השגיאה |
error_uri |
כתובת URI שמספקת פרטים נוספים על השגיאה |
דוגמה לתשובה עם שגיאה 400
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_request",
"error_description": "Request was missing the 'access_token' parameter."
}
המרת קוד הרשאה לאסימון מזהה
תצטרכו להמיר את קוד ההרשאה שקיבלת לטוקן מזהה של Google שמכיל מידע על חשבון Google של המשתמש.
כדי להמיר קוד הרשאה לאסימון מזהה של Google, צריך לבצע קריאה לנקודת הקצה https://oauth2.googleapis.com/token
ולהגדיר את הפרמטרים הבאים:
שדות הבקשה | |
---|---|
client_id |
חובה מזהה הלקוח שהתקבל מדף פרטי הכניסה במסוף ה-API. בדרך כלל, אלה יהיו פרטי הכניסה עם השם New Actions on Google App |
client_secret |
חובה סוד הלקוח שהתקבל מדף פרטי הכניסה במסוף ה-API |
code |
חובה קוד ההרשאה שנשלח בבקשה הראשונית |
grant_type |
חובה כפי שמוגדר במפרט OAuth 2.0, הערך של השדה הזה חייב להיות authorization_code . |
בקשה לדוגמה
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET
Google מגיבה לבקשה הזו על ידי החזרת אובייקט JSON שמכיל אסימון גישה לטווח קצר ואסימון רענון.
התגובה כוללת את השדות הבאים:
שדות התשובה | |
---|---|
access_token |
אסימון גישה שהונפק על ידי Google והאפליקציה שולחת אותו כדי לאשר בקשה ל-Google API |
id_token |
אסימון המזהה מכיל את פרטי חשבון Google של המשתמש. בקטע Validate Response מוסבר איך לפענח ולאמת את התגובה של האסימון המזהה. |
expires_in |
משך החיים שנותר של אסימון הגישה בשניות |
refresh_token |
אסימון שאפשר להשתמש בו כדי לקבל אסימון גישה חדש. אסימוני הרענון בתוקף עד שהמשתמש יבטל את הגישה |
scope |
הערך של השדה הזה תמיד מוגדר ל-openid בתרחיש לדוגמה של כניסה באמצעות חשבון מקושר |
token_type |
סוג הטוקן שהוחזר. בשלב זה, הערך של השדה הזה תמיד מוגדר ל-Bearer |
דוגמה לתשובה
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8
{
"access_token": "Google-access-token",
"id_token": "Google-ID-token",
"expires_in": 3599,
"token_type": "Bearer",
"scope": "openid",
"refresh_token": "Google-refresh-token"
}
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret