מעבר מ-ClientLogin ל-OAuth 2.0

איקאי לאן, YouTube Developer Relations – June 2013

ממשקי API של YouTube משתמשים ב-OAuth 2.0 כדי לאשר בקשות משתמשים. פעמים רבות אנחנו נשאלים אם נוסיף תמיכה באימות ClientLogin או תמיכה דומה בממשקי API של YouTube בעתיד. עם זאת, הוצאנו את ClientLogin משימוש באופן רשמי ב-20 באפריל 2012, ואין לנו תוכניות להוסיף מנגנון כזה.

יש סיבות רבות למה אנחנו חושבים שתמיכה בזרימות שונות של הרשאת OAuth 2.0 טובה יותר למשתמשי YouTube מאשר ClientLogin. הזרימה הזו תומכת בתרחישים לדוגמה לאפליקציות למחשב, לאפליקציות לאינטרנט בלבד, לאפליקציות מקוריות לנייד ואפילו לאפליקציות שפועלות במכשירים כמו טלוויזיות שאין להן מנגנוני קלט מתוחכמים, וקשה לעשות זאת באמצעות ClientLogin. כמו כן, גילינו ש-ClientLogin גורם לכאב ראש נוסף לאחר ההשקה עבור מפתחים רבים. את חלק מהם תיארנו בפוסט בבלוג שלנו, ClientLogin #FAIL.

שימוש ב-OAuth 2.0 לסקריפטים עצמאיים בצד השרת

מפתחים רבים משתמשים ב-ClientLogin כדי לתת הרשאה לסקריפטים של שורת הפקודה שפועלים בשרתים ללא דפדפן. באמצעות OAuth 2.0, כמעט תמיד יהיה דפדפן מעורב – יוצא הדופן הוא בעבודה עם אפליקציה ל-Android שמשתמשת ב-Google Play Services כדי לאחזר אסימונים באמצעות GoogleAuthUtil..

בתהליך אינטרנט בלבד, אתר שרוצה לבצע קריאות API מאומתות בשם משתמש צריך להפנות את המשתמש לדף אימות של google.com, שבו מוסבר מה הניסיון של האפליקציה לגשת אליו. לאחר מכן אפליקציית האינטרנט מקבלת אסימון שמשמש לה לביצוע קריאות ל-API. לאחר מכן, המשתמש יוכל לבטל את הגישה של האפליקציה בכל שלב באמצעות הדף connected apps and sites.

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

האסימון שבשימוש הוא מחרוזת ASCII. אם האסימון הוא offline, הוא נויד. באמצעות האסימון שאוחזר אפשר להריץ את הסקריפט על שולחן העבודה, ולאחר מכן להעתיק את הקוד ולהשתמש בו בשרת מרוחק ללא GUI, בתנאי שהקוד יוצר מכונה של לקוח OAuth 2.0 עם אותו מזהה לקוח וסוד. בנוסף ל-Python, ספריות הלקוח של Google API עבור שפות תכנות אחרות מספקות גם שיטות מועילות לניהול אסימונים, שניתן לשתף בין לקוחות ואפילו להשתמש בהן בספריות HTTP ברמה נמוכה יותר באופן ישיר בכותרת לקוח או כפרמטר של כתובת URL.

כמה דוגמאות לסקריפטים בצד השרת שמשתמשים באסימונים לא מקוונים:

  • תוכנת דימון (daemon) שעוקבת אחר ספרייה להעלאת סרטונים חדשים באופן אוטומטי
  • משימת cron שמתעדכנת בכל יום עם פלייליסטים עם תכנים חדשים
  • סקריפט שעוקב אחרי נתוני סרטונים דרך YouTube Analytics API ומיידע את מנהלי הערוצים לגבי אירועים שמתרחשים, כמו זמן צפייה מצטבר שחורג מהמגבלה. הערה: במקרה הזה, OAuth 2.0 הוא שיטת ההרשאה הנתמכת היחידה, מאחר ש-API של Analytics לא תומך ב-ClientLogin.

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

שיטות מומלצות לבחירת מזהה הלקוח וסוד הלקוח

כל קוד שיש לו אותו מזהה לקוח וזוג סודי יכולים להשתמש באותם אסימוני גישה. מומלץ להגביל את הגישה ל-Client ID ולסודות של לקוחות באמצעות קוד שפועל במחשבים ובמכשירים של הארגון.

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

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

חשבונות שירות לא פועלים עם ממשק ה-API של YouTube

חשבונות שירות לא פועלים עבור קריאות ל-API של נתונים של YouTube מכיוון שלחשבונות שירות נדרש ערוץ YouTube משויך, ולא ניתן לשייך ערוצים חדשים או קיימים לחשבונות שירות. אם אתם משתמשים בחשבון שירות כדי לבצע קריאה ל-YouTube Data API, שרת ה-API מחזיר שגיאה וסוג השגיאה שהוגדר הוא unauthorized, והסיבה לכך היא youtubeSignupRequired.

גישה לא מקוונת/לטווח ארוך ל-YouTube API

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

כדי לוודא שהאפליקציה שלך תקבל אסימון רענון לטווח ארוך ולא אסימון גישה לטווח קצר, השתמש בתהליך 'אפליקציה מותקנת' בזמן יצירת מזהה לקוח ובחר Other לערך 'סוג אפליקציה מותקנת':

בתרחיש לדוגמה זה מומלץ להשתמש בתהליך 'אפליקציה מותקנת'. אם דרושה לך גישה לטווח ארוך ל-YouTube API באפליקציית אינטרנט, אפשר לאחזר פרמטר כזה על ידי הגדרת הפרמטר access_type ל-offline והפרמטר approval_prompt ל-force בבקשת ההרשאה הראשונית או תצורת הלקוח. בספריות לקוח מסוימות יתבצע ניהול של אחזור ורענון אסימוני גישה. אם ברצונך לכתוב קוד הרשאה מותאם אישית משלך, פרסמנו פוסט בבלוג בבלוג של Google Code שבו ניתן להשתמש כבסיס לקוד שלך.

שימוש ב-OAuth 2.0 עם טלפונים, טאבלטים ומכשירים אחרים

מפתחים של אפליקציות ל-Android יכולים לנצל את Google Play services כדי לטפל בפרטי ההרשאות. Google Play Services מציעה תהליך הרשאה סטנדרטי לכל ממשקי Google API, כולל ממשקי API של פלטפורמת YouTube. הגישה הזו תספק למשתמשים באפליקציית ה-Android שלך חוויית משתמש מעולה הרבה יותר מאשר אימות מותאם אישית באמצעות ClientLogin.

במכשירי iOS, Google מספקת שתי אפשרויות:

עבור מכשירים שנועדו לפעול כמכשירים מסוג "מסך שני" או מכשירים כמו טלוויזיות ללא מנגנוני קלט קלים לשימוש, הגישה המועדפת היא OAuth 2.0 למכשירים. OAuth 2.0 למכשירים פועל על ידי הצגת קוד ייחודי למשתמש כשנדרשת בקשת הרשאה. בשלב זה, המשתמשים יתבקשו לגלוש אל http://google.com/device במכשיר אחר, כמו מחשב נייד או טלפון, ולהזין את הקוד הייחודי. האפליקציה מציגה מסך שנראה בערך כך:

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

סיכום

אימות OAuth 2.0 מספק גמישות למפתחים הזקוקים להרשאה ב-YouTube. מפתחים שמכירים את ClientLogin עשויים לגלות שהגדרת האפליקציות שלהם לשימוש ב-OAuth 2.0 מחייבת קצת יותר עבודה כדי להתחיל, אבל לאחר ההעברה, אפליקציות OAuth 2.0 מציעות גמישות רבה יותר, אבטחה ונוחות שימוש בפלטפורמות שונות, למשתמשי קצה.

אם יש לך שאלות נוספות לגבי OAuth 2.0 או כל אחת מהדוגמאות במאמר הזה, אל תהסס לשאול עם התג youtube-api ב-StackOverflow.