כדי לתמוך בתהליך המשתמע של OAuth 2.0, השירות שלכם צריך לספק נקודת קצה להרשאה באמצעות HTTPS. נקודת הקצה הזו אחראית לאימות ולקבלת הסכמה מהמשתמשים לגישה לנתונים. נקודת הקצה של ההרשאה מציגה למשתמשים שלא מחוברים כבר ממשק משתמש לכניסה, ומתעדת את ההסכמה לגישה המבוקשת.
כשיישום של Google צריך לשלוח קריאה לאחד מממשקי ה-API המורשים של השירות שלכם, Google משתמשת בנקודת הקצה הזו כדי לקבל מהמשתמשים שלכם הרשאה לשלוח קריאות לממשקי ה-API האלה בשמם.
קישור של חשבון Google: תהליך מרומז של OAuth
בתרשים הרצף הבא מפורטות האינטראקציות בין המשתמש, Google ונקודות הקצה של השירות שלכם.
תפקידים ותחומי אחריות
בטבלה הבאה מוגדרים התפקידים והאחריות של הגורמים בזרם הענקת גישה משתמע של OAuth לקישור של חשבון Google (GAL). חשוב לזכור שב-GAL, Google פועלת כלקוח OAuth, והשירות שלכם פועל כספק זהויות או ספק שירותים.
| המשתמש / הרכיב | תפקיד ב-GAL | תחומי אחריות |
|---|---|---|
| אפליקציית Google / שרת | לקוח OAuth | מתחיל את התהליך, מקבל את אסימון הגישה באמצעות הפניה אוטומטית בדפדפן, ומאחסן אותו בצורה מאובטחת כדי לגשת לממשקי ה-API של השירות. |
| נקודת הקצה להרשאה | שרת הרשאות | השירות מאמת את המשתמשים, מקבל את ההסכמה שלהם ומנפיק אסימוני גישה לטווח ארוך ישירות ל-Google. |
| URI של הפניה לכתובת אחרת ב-Google | נקודת קצה של קריאה חוזרת (callback) | מקבל את ההפניה האוטומטית של המשתמש משירות ההרשאה עם הערכים access_token ו-state בקטע של כתובת ה-URL. |
סשן טיפוסי של זרם הענקת גישה משתמע באמצעות OAuth 2.0 שמופעל על ידי Google כולל את התהליך הבא:
- Google פותחת את נקודת הקצה של ההרשאה בדפדפן של המשתמש. המשתמש נכנס לחשבון שלו, אם הוא לא מחובר כבר, ומעניק ל-Google הרשאה לגשת לנתונים שלו באמצעות ה-API שלכם, אם הוא עדיין לא העניק הרשאה.
- השירות שלכם יוצר אסימון גישה ומחזיר אותו ל-Google. כדי לעשות זאת, צריך להפנות את הדפדפן של המשתמש בחזרה אל Google עם אסימון הגישה שמצורף לבקשה.
- Google קוראת לממשקי ה-API של השירות ומצרפת את אסימון הגישה לכל בקשה. השירות שלכם מאמת שאסימון הגישה מעניק ל-Google הרשאה לגשת ל-API, ואז משלים את הקריאה ל-API.
מתכון להטמעה
כדי להטמיע את זרם הענקת גישה משתמע:
שלב 1: טיפול בבקשות הרשאה
כש-Google יוזמת קישור חשבון, היא מפנה את המשתמש לנקודת הקצה של ההרשאה שלכם. פרטים על חוזי פרוטוקול ודרישות פרמטרים מופיעים במאמר בנושא נקודת קצה (endpoint) של הרשאה.
כדי לטפל בבקשה, מבצעים את הפעולות הבאות:
אימות הבקשה:
- מוודאים שהערך
client_idזהה למזהה הלקוח שהוקצה ל-Google. - מוודאים שכתובת ה-URL של ההפניה האוטומטית של Google שמופיעה ב-
redirect_uriזהה לכתובת ה-URL הצפויה:none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID - מוודאים ש-
response_typeהואtoken.
- מוודאים שהערך
מאמתים את המשתמש:
- בודקים אם המשתמש מחובר לשירות שלכם.
- אם המשתמש לא מחובר לחשבון, צריך להציג לו בקשה להשלים את תהליך הכניסה או ההרשמה.
יצירת אסימון גישה:
- יצירת טוקן גישה ייחודי שאי אפשר לנחש, שמשויך למשתמש וללקוח.
הפניה חזרה אל Google:
- מפנים את הדפדפן לכתובת ה-URL שמופיעה ב-
redirect_uri. - מוסיפים את הפרמטרים הבאים בפרגמנט URL (hash):
-
access_token: אסימון הגישה שיצרתם. token_type: צריך להיותbearer.-
state: ערך הסטטוס שלא שונה שהתקבל מ-Google.
-
- מפנים את הדפדפן לכתובת ה-URL שמופיעה ב-
טיפול בבקשות למידע על משתמשים
נקודת הקצה של userinfo היא משאב מוגן ב-OAuth 2.0 שמחזיר תלונות לגבי המשתמש המקושר. ההטמעה והאירוח של נקודת הקצה של userinfo הם אופציונליים, חוץ מאשר בתרחישים הבאים לדוגמה:
- כניסה לחשבון המקושר באמצעות Google One Tap.
- מינוי פשוט וקל ב-AndroidTV.
אחרי שהאחזור של אסימון הגישה מנקודת הקצה של האסימון מתבצע, Google שולחת בקשה לנקודת הקצה (endpoint) של userinfo כדי לאחזר פרטי פרופיל בסיסיים של המשתמש המקושר.
| כותרות של בקשות של נקודות קצה של userinfo | |
|---|---|
Authorization header |
אסימון הגישה מסוג נושא. |
לדוגמה, אם נקודת הקצה של Userinfo זמינה
https://myservice.example.com/userinfo, בקשה עשויה להיראות כך:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
כדי שנקודת הקצה של userinfo תטפל בבקשות, מבצעים את השלבים הבאים:
- מחלצים את אסימון הגישה מהכותרת Authorization ומחזירים מידע עבור המשתמש שמשויך לאסימון הגישה.
- אם אסימון הגישה לא חוקי, צריך להחזיר שגיאה מסוג HTTP 401 מאושר עם שימוש בכותרת התגובה
WWW-Authenticate. דוגמה לתגובה עם שגיאה של userinfo: אם מתקבלת תגובה מסוג '401' ללא הרשאה, או כל תגובה אחרת של שגיאה שנכשלה במהלך תהליך הקישור, לא ניתן לשחזר את השגיאה, האסימון שאוחזר יימחק והמשתמש יצטרך להתחיל מחדש את תהליך הקישור.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
אם אסימון הגישה תקין, מוחזר ותגובת HTTP 200 עם אובייקט ה-JSON הבא בגוף ה-HTTPS תגובה:
אם נקודת הקצה (endpoint) של userinfo מחזירה תגובה מוצלחת מסוג HTTP 200, האסימון שאוחזר וההצהרות על זכויות יוצרים יירשמו בחשבון Google של המשתמש.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }תגובה של נקודת הקצה של userinfo subמזהה ייחודי שמזהה את המשתמש במערכת שלכם. emailכתובת האימייל של המשתמש. given_nameאופציונלי: השם הפרטי של המשתמש. family_nameאופציונלי: שם המשפחה של המשתמש. nameאופציונלי: השם המלא של המשתמש. pictureאופציונלי: תמונת פרופיל של המשתמש.