ספטמבר 2008
מבוא
זו תקופה מרגשת למפתחים. התחלנו לראות מספר סטנדרטים פתוחים ברחבי האינטרנט, וכפי שאתם יודעים, Google תמיד הייתה אוהדת מוצדקת של סטנדרטים וטפחת את קהילת הקוד הפתוח.
לאחרונה, כל ממשקי ה-API של נתונים של Google אימצו את התמיכה ב-OAuth, פרוטוקול פתוח שמטרתו לקבוע תקן לגישה של יישומי אינטרנט ואפליקציות אינטרנט לנתונים הפרטיים של המשתמשים. OAuth מספק אמצעי לאימות API בצורה רגילה ומאובטחת. כמתכנתים, מלמדים אותנו לעשות שימוש חוזר בקוד ככל האפשר. OAuth יעזור למפתחים לצמצם את כמות הקוד הכפול שהם כותבים ויקל עליכם ליצור כלים שעובדים עם מספר שירותים ממגוון ספקים שונים.
Audience
ההנחה במאמר הזה היא שאתם מכירים אחד או יותר מה-Google Data APIs, אבל לא בהכרח הקונספטים שמאחורי OAuth. אם אתם רק מתנסים בהתחלה או אם אתם רק סקרנים בנוגע ל-OAuth, המאמר הזה מספק בסיס בסיסי למושגים. אני גם אדון בפרטים על הטמעת OAuth של Google.
המסמך הזה מיועד גם למפתחים שמשתמשים ב-AuthSub, במיוחד במצב רשום עם אבטחה משופרת. בהמשך ננסה להדגיש את הדמיון וההבדלים בין שני הפרוטוקולים. אם יש לך אפליקציות שמשתמשות ב-AuthSub, תוכל להשתמש במידע זה כדי לעבור ל-OAuth, פרוטוקול פתוח ומודרני יותר.
הסברים מעטים
המטרה של הבנת OAuth היא להבין את הטרמינולוגיה שלו. מסמכי התיעוד של מפרט OAuth ואימות OAuth עבור אפליקציות אינטרנט של Google מסתמכים במידה רבה על הגדרות מסוימות, ולכן נבהיר את המשמעות של כל אחד מהם בהקשר של הטמעת OAuth של Google.
- "ריקוד OAuth"
המונח הלא רשמי שלי, שמתאר את תהליך האימות/ההרשאה המלא של OAuth.
- (OAuth) של אסימון בקשה
אסימון ראשוני שמודיע ל-Google שהאפליקציה שלך מבקשת גישה לאחד מממשקי ה-API של הנתונים של Google. בשלב השני של ריקוד ה-OAuth, המשתמש צריך להעניק גישה ידנית לנתונים שלו. אם שלב זה יושלם בהצלחה, אסימון הבקשה יאושר.
- (OAuth) אסימון גישה
השלב האחרון בריקוד הוא החלפת אסימון הבקשה המורשה באסימון גישה. אחרי שהאפליקציה הזו מקבלת את האסימון, המשתמש לא צריך לעבור שוב את ריקוד ה-OAuth, אלא אם האסימון יבוטל.
דמיון ל-AuthSub:
אסימון גישה מסוג OAuth זהה לאסימון הסשן של AuthSub המאובטח. - (נקודות קצה)
אלה כתובות ה-URI הנדרשות לאימות אפליקציה ולהשגת אסימון גישה. לשלושה יש שלושה שלבים בסך הכול – אחד לכל שלב בתהליך ה-OAuth. נקודות הקצה (endpoints) של Google עבור OAuth הן:
כדי לקבל אסימון בקשה: https://www.google.com/accounts/OAuthGetRequestToken
מאשרים את אסימון הבקשה: https://www.google.com/accounts/OAuthAuthorizeToken
שדרוג לאסימון הגישה: https://www.google.com/accounts/OAuthGetAccessToken
דמיון ל-AuthSub:
החלפת אסימון מורשה של אסימון עבור אסימון גישה מקבילה לאסימון של אסימון AuthSub לשימוש חד-פעמי לאסימון הפעלה לטווח ארוך ב-https://www.google.com/accounts/AuthSubRequestToken
וב-https://www.google.com/accounts/AuthSubSessionToken
, בהתאמה. ההבדל הוא שב-AuthSub אין תפיסה של אסימון בקשה ראשוני. במקום זאת, המשתמש יתחיל את תהליך האסימון מדף ההרשאות שלAuthSubRequestToken
. - (OAuth) ספק שירות
אם מדובר ב-Google Data APIs, הספק הזה הוא Google. באופן כללי, ספק השירות משמש לתיאור האתר או שירות האינטרנט שמספק את נקודות הקצה. דוגמה נוספת לספק שירות OAuth היא MCA.
- (OAuth) צרכן
התוכנית שמבקשת הרשאת גישה לנתונים של משתמש (כלומר, היישום שלך). פרוטוקול OAuth הוא גמיש, מכיוון שהוא מאפשר למגוון רחב של לקוחות מסוגים שונים (אינטרנט, אפליקציות, מחשבים שולחניים וניידים).
הערה: אף על פי שפרוטוקול OAuth תומך בתרחיש לדוגמה של שימוש במחשב שולחני או מותקן, Google תומכת רק ב-OAuth לאפליקציות אינטרנט.
תחילת העבודה
הרשמה
כדי להתחיל להשתמש ב-OAuth עם ממשקי ה-API של נתוני Google, נדרשת הגדרה קצרה. מכיוון שכל בקשות ה-OAuth חייבות להיות חתומות באופן דיגיטלי, תחילה עליכם לרשום את הדומיין שלכם ולהעלות אישור ציבורי ל-Google. למידע נוסף בנושא, ניתן לעיין במאמרים רישום לאפליקציות מבוססות-אינטרנט ויצירת מפתחות ואישורים לשימוש במצב רשום.
בקשות לחתימה
לאחר שהדומיין שלך נרשם, תהיה מוכן להתחיל לחתום על בקשות. אחד המושגים הקשים ביותר לגבי OAuth הוא כיצד לבנות בצורה נכונה את oauth_signature
, והרעיון של מחרוזת הבסיס לחתימה. מחרוזת הבסיס היא הנתונים שאתם חותמים באמצעות המפתח הפרטי שלכם (באמצעות RSA_SHA1
). התוצאה היא הערך שהגדרתם עבור oauth_signature
.
בקשה לדוגמה
GET
רשימה של יומני Google של משתמש בדומיין http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime
פורמט של מחרוזת בסיס | base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters |
---|---|
מחרוזת בסיס לדוגמה | GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime |
בקשת HTTP לדוגמה |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0" |
הערה: הערך הזה משמש כייצוג בלבד. ה-oauth_signature
שלך יהיה ארוך בהרבה.
הערות במחרוזת הבסיס:
- פרמטר השאילתה
orderby=starttime
ממוין יחד עם שאר הפרמטרים שלoauth_*
לפי סדר הערכים ההקסדצימליים. - המחרוזת הזו גם לא מכילה תו '?'.
- החלק
base-http-request-url
מכיל רק את כתובת ה-URL הבסיסית בקידוד של כתובת ה-URL:http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull
. - ה-
oauth_token
מקודד פעמיים.
הערות בכותרת Authorization
:
- סדר הפרמטרים של
oauth_*
לא חשוב בכותרתAuthorization
. - הכותרת לא כוללת את
orderby=starttime
כמו שהמחרוזת הבסיסית כוללת. פרמטר שאילתה זה נשמר כחלק מכתובת ה-URL של הבקשה.
למידע נוסף על חתימה על בקשות שימוש ב-OAuth, כדאי לעיין במאמר חתימת בקשות OAuth.
הבדל מ-AuthSub:
לשם השוואה, אותה דוגמה שמשתמשים ב-AuthSub מאובטח:
פורמט של מחרוזת בסיס | base_string = http-method http-request-URL timestamp nonce |
---|---|
מחרוזת בסיס לדוגמה |
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d |
בקשת HTTP לדוגמה |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1" |
למידע נוסף על חתימה על בקשות AuthSub, ראה חתימה על בקשות AuthSub.
כלי מגרש המשחקים של OAuth
מטרה
חלק מהמשתמשים ציינו של-OAuth יש עקומת למידה גבוהה. בהשוואה לממשקי ה-API האחרים של Google לאימות, אפשר להסכים. היתרון של OAuth נראה לעין כשתרחיבו את האפליקציה כדי להשתמש בשירותים אחרים (שאינם של Google). כתיבה של קטע אחד של קוד אימות שפועל אצל ספקי שירות שונים וממשקי ה-API שלהם נשמעת טוב. מאוחר יותר תודה לך בכך שתלמד את הפרוטוקול.
מגרש המשחקים של OAuth הוא כלי שיצרתי כדי לעזור למפתחים לרפא את בעיות ה-OAuth שלהם. תוכלו להשתמש ב-Stadia כדי לנפות באגים בבעיות, לבדוק את ההטמעה שלכם או לנסות את ממשקי ה-API של נתוני Google.
מה יקרה?
- ממחיש את זרימת אימות ה-OAuth: אחזור אסימון בקשה, אישור האסימון ושדרוגו לאסימון גישה.
- הצגת מחרוזת הבסיס הנכונה של החתימה עבור כל בקשה.
- מציגה את כותרת
Authorization
הנכונה לכל בקשה. - מדגים איך להשתמש ב-
oauth_token
לאינטראקציה עם פיד נתונים מאומת של Google. אפשרGET
/POST
/PUT
/DELETE
נתונים. - צפייה בפיד מאומת ישירות בדפדפן.
- מאפשרת לבדוק את ה-
oauth_consumer_key
(הדומיין הרשום) שלך ואת המפתח הפרטי. - אלו שירותי פיד הנתונים של Google זמינים ל
oauth_token
שלך.
הרצה של הדגמה
שלב 1: בחירת ההיקפיםקודם כול בוחרים את ה-API שבו רוצים להשתמש. לשם כך, בוחרים היקף אחד או יותר. בהדגמה זו אני מבקש אסימון שיעבוד עם Blogger וגם עם אנשי קשר של Google. דמיון ל-AuthSub: |
|
שלב 2: שינוי של פרמטרים והגדרות ב-OAuthבינתיים, אל תשנו אף הגדרה בתיבה 'שינוי של פרמטרי OAuth'. מאוחר יותר, תוכל לבדוק עם המפתח הפרטי שלך על ידי שינוי ה- הערה: השדות בנוסף ל- הבדל מ-AuthSub: |
|
שלב 3-5: קבלת אסימון הגישהיש שלושה שלבים לקבלת אסימון גישה ל-OAuth. השלב הראשון הוא לאחזר אסימון בקשה. כך Google תדע שהאפליקציה שלכם מתחילה את ריקוד ה-OAuth. קודם כל, לוחצים על הלחצן 'בקשת אסימון' בתיבה 'קבלת האסימון'. חלק מהשדות יאוכלסו בנתונים.
|
|
לאחר מכן, לחצו על הלחצן 'מתן הרשאה' בתיבה 'קבלת האסימון'. בדף ההרשאות הזה, יש ללחוץ על הלחצן 'הענקת גישה' כדי לתת הרשאה לאסימון הבקשה ולהפנות בחזרה אל 'מגרש המשחקים של OAuth'. דמיון ל-AuthSub: השונה מ-AuthSub: טיפ: ציון כתובת URL ל- |
|
לסיום, לוחצים על הלחצן 'אסימון גישה' בתיבה 'קבלת האסימון'. הפעולה הזו משדרגת את אסימון הבקשה המורשה (כפי שמצוין בתווית האדומה 'אסימון גישה'). אם אתם רוצים לקבל אסימון חדש, לחצו על 'התחלה מחדש' כדי להתחיל מחדש את ריקוד ה-OAuth. עכשיו אנחנו יכולים לעשות משהו מעניין! |
שימוש באסימון הגישה
עכשיו אתם מוכנים לשלוח שאילתות לגבי פידים, להוסיף, לעדכן או למחוק נתונים. בזמן השימוש בנתונים בפועל, יש לפעול לפי שלוש שיטות ה-HTTP האחרונות.
טיפ: כדי לגלות פידים שזמינים לאסימון הגישה שלכם, יש ללחוץ על הלחצן "פידים זמינים".
דוגמה לשאילתה: GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3
הדוגמה הזו מחזירה עד שלושה פוסטים בבלוג מסוים. אפשר גם להציג את הפיד או הרשומה שהוחזרו ישירות בדפדפן בלחיצה על הקישור 'הצגה בדפדפן' שמתחת לאזור המודגש בתחביר.
דוגמה: איך מעדכנים פוסט
- עליך למצוא את הרכיב
<link>
עם rel="edit" בפוסט שברצונך לעדכן. הוא אמור להיראות כך:<link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
מדביקים את כתובת ה-URL של href בקלט "הזנת פיד נתונים של Google".
- מעתיקים את קובץ ה-XML של הערך הקיים על ידי לחיצה על 'הצגת פשוט' בחלק העליון של החלונית המודגשת בתחביר. מעתיקים רק את גוף התגובה, ולא את הכותרות.
- משנים את התפריט הנפתח של שיטת HTTP ל-
PUT
. - יש ללחוץ על "הזנת נתוני פוסט" מתחת לתפריט הנפתח הזה ולהדביק את קובץ ה-XML של
<entry>
בחלון הקופץ. - לוחצים על הלחצן "ביצוע".
השרת יגיב באמצעות 200 OK
.
טיפ: במקום להעתיק את הקישור edit
באופן ידני, מבטלים את הסימון של התיבה 'הדגשה של תחביר?' אחרי כל שאילתה אפשר ללחוץ על הקישורים שבגוף התגובה ל-XML.
סיכום
טכנולוגיות כמו AtomPub/Atom Publishing Protocol (פרוטוקול הבסיס של ה-Google Data APIs) ו-OAuth עוזרות לקדם את האינטרנט. ככל שיותר ויותר אתרים יתחילו לאמץ את הסטנדרטים האלה, כך המפתחים יהיו הזוכים. יצירה פתאומית של אפליקציה קטלנית הופכת פתאומית למפחידה יותר.
אם יש לך שאלות או הערות בנושא מגרש המשחקים של OAuth, או אם אתה משתמש ב-OAuth עם ממשקי API של Google, אנחנו מזמינים אותך לבקר בפורום התמיכה של ממשקי API של G Suite ו-Marketplace API.