כתיבה נכונה של REST-API
מתחיל לכתוב REST-API לאפליקציה שלי. אני מעלה את השאלה הזו כי אחד הפערים הגדולים שלי הוא בנושא אבטחת מידע ברשת.
כיום אחת הדרכים הנפוצות להזדהות הוא שימוש ב - OAuth. אם אני מבין נכון, זה דורש הזדהות מול צד ג' כגון גוגל או פייסבוק או לחילופין הקמת שרת Oauth משלך.
השאלה הראשונה שלי היא האם אני צודק, ואכן נדרש שימוש בצד ג' כדי לנהל הזדהות מסוג OAuth?
כרגע הפתרון שלי נראה כך:
מתחיל לכתוב REST-API לאפליקציה שלי. אני מעלה את השאלה הזו כי אחד הפערים הגדולים שלי הוא בנושא אבטחת מידע ברשת.
כיום אחת הדרכים הנפוצות להזדהות הוא שימוש ב - OAuth. אם אני מבין נכון, זה דורש הזדהות מול צד ג' כגון גוגל או פייסבוק או לחילופין הקמת שרת Oauth משלך.
השאלה הראשונה שלי היא האם אני צודק, ואכן נדרש שימוש בצד ג' כדי לנהל הזדהות מסוג OAuth?
כרגע הפתרון שלי נראה כך:
- הלקוח שולח POST עם שם וסיסמה (ייחודיים לאפליקציה) אל הכתובת /login. השם והסיסמה מושווים לאלה שנמצאים אצלי בשרת (מושווים כמובן לגיבוב קריפטוגרפי יחד עם salt של הסיסמה)
- אם אין התאמה מכל סיבה שהיא (בין אם שם המשתמש לא קיים ובין אם הסיסמה לא נכונה) מוחזר 404. זה כדי למנוע זליגה של שמות משתמשים.
- אם יש התאמה מוחזרת תשובה עם 200, שכוללת שדה של token, של refresh-token ושל expiration.
- כל בקשה אחרת ל-API צריכה להישלח עם אותו - token. אם אין על השרת session שמשוייך לאותו token, מוחזר401. אחרת מוחזרת התשובה הרלוונטית. אם ה - session פג תוקף, יוחזר גם 401 למשך מספר דקות, עד שהוא יעלם לחלוטין ואז גם refresh לא יעשה את העבודה.
- אם פג התוקף, הלקוח צריך לשלוח את ה - refresh-token יחד עם ה - token המקורי כדי לקבל חדש.