OAuth 2.0
כל כפתור "היכנס עם Google", כל קישור "התחבר לחשבון הטוויטר שלך", כל שילוב API בין שירותים מודרניים נוסעים ב-OAuth. הפרוטוקול מחליף את שיתוף הסיסמאות בזרימה של אסימונים ומסכי הסכמה, והבנת החלקים הנעים מבטלת קטגוריה של התקפות ונוחות שניהם.
גוף המאמר המלא מסופק באנגלית להלן.
OAuth 2.0 היא מסגרת הרשאה המאפשרת לאפליקציה אחת לקבל גישה מוגבלת למשאבים של אפליקציה אחרת בשם משתמש - מבלי לראות את הסיסמה של המשתמש. מקרה השימוש הקלאסי: אפליקציית יומן שצריכה לקרוא את יומן Google שלך לא צריכה לדרוש ממך לתת לה את סיסמת Google שלך. OAuth מאפשרת לך להעניק לאפליקציה אסימון בהיקף שניתן לביטול במקום זאת.
השחקנים
ארבעה תפקידים בזרימת OAuth:
- בעל המשאב - אתה, המשתמש עם נתונים איפשהוPLZ12XXPLZPLZ12125PLZPLZ12XPLZPLZ12XPLZPLZ12XPLZPLZ12 PLZ12PLZ12XPLZ PLZ12XXPLZ אפליקציה שרוצה גישה (לדוגמה, מציג לוח שנה של צד שלישי)
- Authorization server — השירות שמאמת אותך ומנפיק אסימונים (למשל, נקודת הקצה של Google OAuth)
- Resource שלך, השרת Google מחזיק את הנתונים שלך, . Calendar API)
זרימת קוד ההרשאה
זרימת צד השרת הרגילה, פשוטה:
- אתה לוחץ על "התחבר ליומן Google" באפליקציית הלקוח.
- הפרמטרים של לקוח הלקוח מפנים את הדפדפן שלך, מזהה הלקוח שלך: redirect_uri, scope (calendar.read), state (אסימון CSRF).
- אתה מאמת לגוגל אם עדיין לא מחובר.
- Google מציגה לך מסך הסכמה: "CalendarViewer רוצה לקרוא את היומן שלך. לאפשר?"
- You לחץ על הכל. Google מפנה את הדפדפן שלך בחזרה ל-redirect_uri של הלקוח עם קוד הרשאה חד-פעמי.
- קוד השרת של הלקוח מחליף את קוד ההרשאה (בתוספת סוד הלקוח שלו) עבור אסימון גישה על ידי קריאה ישירה לנקודת הקצה האסימון של Google.
- הלקוח משתמש באסימון הגישה ב-Google Calendar שלך behalf.
- כאשר תוקף אסימון הגישה יפוג (בדרך כלל שעה), הלקוח משתמש באסימון רענון כדי לקבל אסימון חדש מבלי להטריד אותך.
מאפיין האבטחה המכריע: הסיסמה שלך לעולם לא נוגעת באפליקציית הלקוח. הלקוח מקבל אסימון בהיקף שניתן לבטל בלוח המחוונים של החשבון של גוגל בכל עת.
OAuth 2.0 לעומת OAuth 2.1 מול OIDC
- OAuth 2.0 הוא התקן 2011627 (20127). מספר RFCs הרחבות ומסמכי שיטות עבודה מומלצות נוספו מאז.
- OAuth 2.1 (בטיוטה נכון לשנת 2026) מאגדת את השיטות המומלצות הנוכחיות למפרט אחד - PKCE חובה, זרימה מרומזת שהוסרה וכו'. (OIDC) היא שכבת זהות על גבי OAuth 2.0. OAuth בלבד נותן אסימון גישה אטום; OIDC מוסיף אסימון מזהה (JWT) המאמת את המשתמש. רוב כפתורי "היכנס עם..." משתמשים ב-OIDC, לא ב-OAuth.
סוגי ההענקה
OAuth 2.0 מגדירים מספר זרימות עבור תרחישים שונים:
- PLZ73X זרימת השרת הסטנדרטית-קוד הקוד הסטנדרטי. עם סיומת PKCE, בשימוש גם על ידי אפליקציות לנייד ו-SPA.
- Implicit Flow (הוצא משימוש) - הונפק אסימוני גישה ישירות דרך קטע כתובת URL. פגיע לדליפה סמלית; מוחלף בקוד הרשאה + PKCE.
- Resource Owner Password Credentials (בשימוש נדיר) - הלקוח אוסף את הסיסמה של המשתמש ומחליף אותה באסימון. יש להשתמש רק בתרחישי העברה מדור קודם.
- Client Credentials — עבור מכונה-למכונה שבה אין משתמש. הלקוח מאמת את עצמו ומקבל אסימון למשאבים שלו.
- Device Code - עבור מכשירים ללא דפדפנים (טלוויזיות, IoT). המכשיר מציג קוד; המשתמש מאשר מטלפון או מחשב נייד.
- Refresh Token — מחליף אסימון רענון ארוך טווח באסימון גישה חדש ללא אינטראקציה עם המשתמש. Code Exchange, מבוטא "pixie") מונע התקפות יירוט של קוד הרשאה. הלקוח יוצר סוד אקראי, מגיב אותו ושולח את ה-hash בבקשת ההרשאה. בעת החלפת הקוד, הוא שולח את הסוד המקורי. שרת ההרשאות מאמת את התאמות ה-hash. כל תוקף שיירט את הקוד לא יכול להחליף אותו ללא הסוד המקורי.
PKCE נחשב כעת חובה עבור כל לקוחות OAuth - ציבוריים (דפדפן, נייד) וסודיים (צד השרת) כאחד.
Scopes
Tokens מונפקים עם היקפים ספציפיים - הפעולות שהם רשאים לבצע. ההיקפים הטיפוסיים של Google נראים כמו
https://www.googleapis.com/auth/calendar.readonly. הלקוח מבקש היקפים; המשתמש רואה אותם במסך ההסכמה ומאשר או מסרב. עקרון ההרשאות הקטנות ביותר: בקש רק את ההיקפים שאתה באמת צריך.Common OAuth attacks
- Open redirect. פרמטר redirect_uri שהוגדר בצורה שגויה מאפשר לתוקף להפנות את קוד ההרשאה לשרת משלו.XPLZX11XXPLStat1 omission. ללא ערך מצב הקשור להפעלת המשתמש, זרימות OAuth פגיעות ל-CSRF - תוקף מרמה את הקורבן להשלים זרימת OAuth המקשרת את חשבון התוקף להפעלה של הקורבן. חולשה).
- Tגניבת סימנים דרך XSS. אם אפליקציית הלקוח מאחסנת אסימונים ב-localStorage ויש לה פגיעות כלשהי של XSS, התוקפים יכולים לגנוב אותם.
- Phishing מסך ההסכמה. היקפים; המשתמש, המותנה ללחוץ על "אפשר" במסכי הסכמה, מעניק גישה ללא בדיקה.
מה לעשות כמשתמש
- סקור מדי פעם אפליקציות מחוברות בהגדרות חשבון Google/Apple/Microsoft/Facebook/GitHub. בטל את אלה שאינך משתמש בהם.
- קרא את היקפי מסך ההסכמה לפני הענקת גישה. "נהל את היומן שלך" שונה מ"הצג את היומן שלך."
- היה סקפטי לגבי בקשות OAuth מאפליקציות שאינך מזהה, גם אם הן מופיעות במהלך זרימת עבודה מוכרת.
שאלות נפוצות
- האם OAuth זהה לאימות?
- לא. OAuth הוא הרשאה - הוא מעניק ללקוח הרשאה לגשת למשאבים. OpenID Connect, בנוי על OAuth, מוסיף אימות. "היכנס עם Google" הוא OIDC; "חיבור יומן Google" יכול להיות תלוי אם האפליקציה צריכה לדעת מי אתה או רק צריכה גישה לנתונים שלך.
- האם עלי להשתמש ב-OAuth או לאחסן סיסמאות?
- השתמש ב-OAuth בכל מקום אפשרי. אחסון סיסמאות משתמש פירושו בירושה של כל האחריות לגיבוב, מלח, תגובת הפרה, שחזור סיסמאות ו-2FA. האצלה ל-Google/Apple/Microsoft/GitHub באמצעות OAuth מורידה את כל זה. הפשרה היא שהמשתמשים שלך צריכים חשבונות אצל אותם ספקים.
- מדוע ניתן לבטל אסימוני OAuth אך לא ניתן לבטל סיסמאות?
- אסימונים מפנים לערך במסד הנתונים של שרת ההרשאות. ביטול הערך מבטל את האסימון באופן מיידי. סיסמאות הן ידע - אתה יכול לסובב את הסיסמה ולאלץ אימות מחדש, אבל הסיסמה הישנה נשארת תקפה עד שתעשה זאת.
- מה ההבדל בין OAuth 2.0 ל-OAuth 1.0?
- OAuth 1.0 (2007) השתמש בחתימות קריפטוגרפיות על כל בקשה. OAuth 2.0 (2012) מסתמך על TLS לאבטחת תחבורה ומשתמש באסימוני נושאים. OAuth 2.0 פשוט יותר ליישום ונשלח כמעט בכל API מודרני; OAuth 1.0 הוצא משימוש.
- האם אסימוני OAuth מסוכנים אם הם דלפים?
- כן - לכל מי שיש לו את האסימון יש את הגישה המוענקת עד שתוקפו יפוג או יבוטל. מצמצמים: משך חיים קצר של אסימון גישה (אופייני לשעה), רענון אסימונים המאוחסנים בצורה מאובטחת יותר, מזעור היקף, רישום ביקורת. התייחס לאסימוני גישה באותה זהירות כמו סיסמאות במהלך תקופת התוקף שלהם.