החשבונות מקושרים באמצעות תהליכים מרומזים וקודי הרשאה של OAuth 2.0, בהתאם לתקנים המקובלים בתחום. השירות צריך לתמוך בנקודות קצה של הרשאה והחלפת אסימונים שתואמות ל-OAuth 2.0.
בתהליך העקיף, Google פותחת את נקודת הקצה (endpoint) של ההרשאה בדפדפן של המשתמש. אחרי הכניסה, מחזירים ל-Google אסימון גישה לטווח ארוך. טוקן הגישה הזה נכלל עכשיו בכל בקשה שנשלחת מ-Google.
בתהליך הרשאה באמצעות קוד, נדרשים שני נקודות קצה:
נקודת הקצה של ההרשאה, שבה מוצג ממשק המשתמש של הכניסה למשתמשים שעדיין לא מחוברים. נקודת הקצה להרשאה יוצרת גם קוד הרשאה לטווח קצר כדי לתעד את הסכמת המשתמשים לגישה המבוקשת.
נקודת הקצה החלפת אסימונים, שאחראית לשני סוגים של החלפות:
- מחליפה קוד הרשאה באסימון רענון לטווח ארוך ובאסימון גישה לטווח קצר. המרות כאלה מתרחשות כשהמשתמש עובר את תהליך קישור החשבון.
- המרת אסימון רענון לטווח ארוך באסימון גישה לטווח קצר. ההחלפה הזו מתרחשת כש-Google זקוקה לאסימון גישה חדש כי התוקף של האסימון הקודם פג.
בחירת תהליך OAuth 2.0
אמנם קל יותר להטמיע את התהליך המשתמע, אבל Google ממליצה שלא יהיה תאריך תפוגה לטוקני הגישה שהונפקו בתהליך המשתמע. הסיבה לכך היא שהמשתמש נדרש לקשר מחדש את החשבון שלו אחרי שתוקף האסימון פג בתהליך המשתמעות. אם אתם צריכים שתוקף האסימון יפוג, מומלץ מאוד להשתמש במקום זאת בתהליך של הרשאה לקוד.
הנחיות עיצוב
בקטע הזה מתוארות הדרישות וההמלצות לגבי העיצוב של מסך המשתמש שאתם מארחים בתהליכי הקישור של OAuth. אחרי שהאפליקציה של Google קוראת לאפליקציה, הפלטפורמה מציגה למשתמש מסך הסכמה לכניסה לדף של Google ולקישור חשבונות. המשתמש מופנה חזרה לאפליקציה של Google אחרי שהסכים לקישור החשבונות.
דרישות
- עליך לציין שחשבון המשתמש יקושר ל-Google, לא למוצר ספציפי של Google, כמו Google Home או Google Assistant.
המלצות
מומלץ לבצע את הפעולות הבאות:
הצגת מדיניות הפרטיות של Google צריך לכלול קישור למדיניות הפרטיות של Google במסך ההסכמה.
נתונים לשיתוף. חשוב להשתמש בשפה ברורה ותמציתית כדי להסביר למשתמשים אילו נתונים Google צריכה מהם ולמה.
קריאה ברורה לפעולה עליכם לציין במסך ההסכמה קריאה ברורה לפעולה, למשל 'מסכים/ה וקישור'. הסיבה לכך היא שהמשתמשים צריכים להבין אילו נתונים הם נדרשים לשתף עם Google כדי לקשר את החשבונות שלהם.
אפשרות לבטל צריך לספק למשתמשים אפשרות לחזור אחורה או לבטל, אם הם בוחרים לא לקשר.
תהליך כניסה נקי. חשוב לוודא שלמשתמשים יש שיטה ברורה לכניסה לחשבון Google, כמו שדות של שם המשתמש והסיסמה או כניסה באמצעות חשבון Google.
היכולת לבטל את הקישור. להציע למשתמשים מנגנון לביטול הקישור, כמו כתובת URL להגדרות החשבון שלהם בפלטפורמה שלכם. לחלופין, אפשר לכלול קישור לחשבון Google שבו המשתמשים יכולים לנהל את החשבון המקושר.
יכולת לשנות את חשבון המשתמש כדאי להציע למשתמשים שיטה להחלפת החשבונות. האפשרות הזו שימושית במיוחד אם למשתמשים יש כמה חשבונות.
- אם משתמש צריך לסגור את מסך ההסכמה כדי לעבור לחשבון אחר, צריך לשלוח ל-Google הודעת שגיאה שניתן לשחזור כדי שהמשתמש יוכל להיכנס לחשבון הרצוי באמצעות קישור OAuth והתהליך המשתמע.
מוסיפים את הלוגו שלכם. להציג את הלוגו של החברה במסך ההסכמה. השתמשו בהנחיות הסגנון שלכם כדי למקם את הלוגו. אם רוצים להציג גם את הלוגו של Google, אפשר לעיין במאמר סמלי לוגו וסימנים מסחריים.
יצירת הפרויקט
כדי ליצור את הפרויקט כך שישתמש בקישור לחשבון:
- Go to the Google API Console.
- לחץ על צור פרויקט .
- הזן שם או קבל את ההצעה שנוצרה.
- אשר או ערוך את כל השדות שנותרו.
- לחץ על צור .
לצפייה במזהה הפרוייקט שלך:
- Go to the Google API Console.
- מצא את הפרוייקט שלך בטבלה בדף הנחיתה. מזהה הפרויקט מופיע בעמודה מזהה .
הגדרת מסך ההסכמה של OAuth
תהליך הקישור לחשבון Google כולל מסך הסכמה שבו המשתמשים מקבלים מידע על האפליקציה שמבקשת גישה לנתונים שלהם, על סוג הנתונים שהיא מבקשת ועל התנאים החלים. לפני שיוצרים מזהה לקוח של Google API, צריך להגדיר את מסך ההסכמה ל-OAuth.
- פותחים את הדף OAuth consent screen במסוף Google APIs.
- אם מתבקשים, בוחרים את הפרויקט שיצרתם.
בדף 'מסך הסכמה ל-OAuth', ממלאים את הטופס ולוחצים על הלחצן 'שמירה'.
שם האפליקציה: השם של האפליקציה שמבקשת הסכמה. השם צריך לשקף במדויק את האפליקציה שלכם ולהיות עקבי עם שם האפליקציה שהמשתמשים רואים במקומות אחרים. שם האפליקציה יופיע במסך ההסכמה לקישור החשבון.
לוגו האפליקציה: תמונה במסך ההסכמה שתעזור למשתמשים לזהות את האפליקציה. הלוגו מוצג במסך ההסכמה לקישור החשבון ובהגדרות החשבון.
כתובת אימייל לתמיכה: כדי שהמשתמשים יוכלו ליצור איתכם קשר עם שאלות לגבי ההסכמה שלהם.
היקפי גישה לממשקי Google API: היקפי הגישה מאפשרים לאפליקציה לגשת לנתונים הפרטיים של המשתמשים ב-Google. בתרחיש לדוגמה של קישור לחשבון Google, היקף ברירת המחדל (אימייל, פרופיל, openid) מספיק, ואין צורך להוסיף היקפים רגישים. באופן כללי, מומלץ לבקש היקפי גישה באופן מצטבר, בזמן הצורך בגישה, ולא מראש. מידע נוסף
דומיינים מורשים: כדי להגן עליכם ועל המשתמשים שלכם, Google מאפשרת רק לאפליקציות שמבצעות אימות באמצעות OAuth להשתמש בדומיינים מורשים. הקישורים של האפליקציות חייבים להתארח בדומיינים מורשים. מידע נוסף
קישור לדף הבית של האפליקציה: דף הבית של האפליקציה. חייב להתארח בדומיין מורשה.
קישור למדיניות הפרטיות של האפליקציה: מוצג במסך ההסכמה לקישור לחשבון Google. האתר חייב להתארח בדומיין מורשה.
קישור לתנאים ולהגבלות של האפליקציה (אופציונלי): חייב להתארח בדומיין מורשה.
איור 1. מסך הסכמה לקישור חשבון Google לאפליקציה בדיונית, Tunery
בודקים את 'סטטוס אימות'. אם הבקשה צריכה לעבור אימות, לוחצים על הלחצן 'שליחה לאימות' כדי לשלוח את הבקשה לאימות. פרטים נוספים זמינים במאמר דרישות לאימות OAuth.
הטמעת שרת OAuth
To support the OAuth 2.0 implicit flow, your service makes an authorization endpoint available by HTTPS. This endpoint is responsible for authentication and obtaining consent from users for data access. The authorization endpoint presents a sign-in UI to your users that aren't already signed in and records consent to the requested access.
When a Google application needs to call one of your service's authorized APIs, Google uses this endpoint to get permission from your users to call these APIs on their behalf.
A typical OAuth 2.0 implicit flow session initiated by Google has the following flow:
- Google opens your authorization endpoint in the user's browser. The user signs in, if not signed in already, and grants Google permission to access their data with your API, if they haven't already granted permission.
- Your service creates an access token and returns it to Google. To do so, redirect the user's browser back to Google with the access token attached to the request.
- Google calls your service's APIs and attaches the access token with each request. Your service verifies that the access token grants Google authorization to access the API and then completes the API call.
Handle authorization requests
When a Google application needs to perform account linking via an OAuth 2.0 implicit flow, Google sends the user to your authorization endpoint with a request that includes the following parameters:
Authorization endpoint parameters | |
---|---|
client_id |
The client ID you assigned to Google. |
redirect_uri |
The URL to which you send the response to this request. |
state |
A bookkeeping value that is passed back to Google unchanged in the redirect URI. |
response_type |
The type of value to return in the response. For the OAuth 2.0 implicit
flow, the response type is always token . |
user_locale |
The Google Account language setting in RFC5646 format used to localize your content in the user's preferred language. |
For example, if your authorization endpoint is available at
https://myservice.example.com/auth
, a request might look like the following:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token&user_locale=LOCALE
For your authorization endpoint to handle sign-in requests, do the following steps:
Verify the
client_id
andredirect_uri
values to prevent granting access to unintended or misconfigured client apps:- Confirm that the
client_id
matches the client ID you assigned to Google. - Confirm that the URL specified by the
redirect_uri
parameter has the following form:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Confirm that the
Check if the user is signed in to your service. If the user isn't signed in, complete your service's sign-in or sign-up flow.
Generate an access token for Google to use to access your API. The access token can be any string value, but it must uniquely represent the user and the client the token is for and must not be guessable.
Send an HTTP response that redirects the user's browser to the URL specified by the
redirect_uri
parameter. Include all of the following parameters in the URL fragment:access_token
: The access token you just generatedtoken_type
: The stringbearer
state
: The unmodified state value from the original request
The following is an example of the resulting URL:
https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
Google's OAuth 2.0 redirect handler receives the access token and confirms
that the state
value hasn't changed. After Google has obtained an
access token for your service, Google attaches the token to subsequent calls
to your service APIs.
טיפול בבקשות למידע על משתמשים
נקודת הקצה של 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:HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
אם מתקבלת תגובה מסוג '401' ללא הרשאה, או כל תגובה אחרת של שגיאה שנכשלה במהלך תהליך הקישור, לא ניתן לשחזר את השגיאה, האסימון שאוחזר יימחק והמשתמש יצטרך להתחיל מחדש את תהליך הקישור. אם אסימון הגישה תקין, מוחזר ותגובת HTTP 200 עם אובייקט ה-JSON הבא בגוף ה-HTTPS תגובה:
{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }
אם נקודת הקצה (endpoint) של userinfo מחזירה תגובה מוצלחת מסוג HTTP 200, האסימון שאוחזר וההצהרות על זכויות יוצרים יירשמו בחשבון Google של המשתמש.תגובה של נקודת הקצה של userinfo sub
מזהה ייחודי שמזהה את המשתמש במערכת שלכם. email
כתובת האימייל של המשתמש. given_name
אופציונלי: השם הפרטי של המשתמש. family_name
אופציונלי: שם המשפחה של המשתמש. name
אופציונלי: השם המלא של המשתמש. picture
אופציונלי: תמונת פרופיל של המשתמש.
אימות ההטמעה
אפשר לאמת את ההטמעה באמצעות הכלי OAuth 2.0 Playground.
בכלי, מבצעים את הפעולות הבאות:
- לוחצים על Configuration (הגדרה) כדי לפתוח את חלון ההגדרה של OAuth 2.0.
- בשדה תהליך OAuth, בוחרים באפשרות צד הלקוח.
- בשדה נקודות קצה של OAuth, בוחרים באפשרות בהתאמה אישית.
- מציינים את נקודת הקצה (endpoint) של OAuth 2.0 ואת מזהה הלקוח שהקציתם ל-Google בשדות המתאימים.
- בקטע שלב 1, לא בוחרים היקפי גישה של Google. במקום זאת, צריך להשאיר את השדה הזה ריק או להקליד היקף תקין לשרת (או מחרוזת שרירותית אם לא משתמשים בהיקפים של OAuth). בסיום, לוחצים על Authorize API.
- בקטעים שלב 2 ושלב 3, מבצעים את התהליך OAuth 2.0 ומוודאים שכל שלב פועל כמו שצריך.
אפשר לאמת את ההטמעה באמצעות הכלי הדגמה של קישור לחשבון Google.
בכלי, מבצעים את השלבים הבאים:
- לוחצים על הלחצן כניסה באמצעות חשבון Google.
- בוחרים את החשבון שרוצים לקשר.
- מזינים את מזהה השירות.
- אפשר להזין היקף אחד או יותר שלגביו רוצים לבקש גישה.
- לוחצים על התחלת הדגמה.
- כשמופיעה הבקשה, מאשרים את האפשרות להביע הסכמה לדחיית בקשת הקישור.
- מוודאים שאתם מופנים מחדש לפלטפורמה שלכם.