כניסה לחשבון מקושר

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

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

הדרישות

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

איך זה עובד

תנאי מוקדם : המשתמש קישר בעבר את חשבון Google שלו לחשבון שלו בשירות שלכם.

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

הטמעת כניסה באמצעות חשבון מקושר באפליקציה ל-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

אימות התשובה של אסימון המזהה