כאב ראש עם oauth authentication

כאב ראש עם oauth authentication

האמת שהפעם מיקרוסופט הגדילו לעשות. תסבוכת כזו לא ראיתי בחיים, ואני עובר איתם כבר מערכת authentiation שלישית לדעתי.
כל עוד אתה עובד לפי התכנון שלהם, זה עובד בסדר. אני מדבר על ניהול משתמשים ב web api . אני עושה register, מקבל token, שומר אותו בקליינט, ויכול לעשות login, הכל בסדר.
אבל אני צריך לשנות בטיפה את מנגנון ה login. איפה הקוד? הוא מוסתר. איפה הקוד שרץ כשאתה שולח נתונים ל /Token ? קשה למצוא. אני בינתיים לא הצלחתי. כלומר, אם אני רוצה להתנות את הלוג אין, או משהו כזה - חבל לך על הזמן.
האם מישהו יודע במקרה איפה הקוד מסתתר?
 

nocgod

New member
יש סיבה ללמה זה מוסתר

לא משחקים עם oauth אם אתה רוצה לצאת מחוץ להגדרות הפרוטוקול.

באופן כללי אשמח אם תוכל לפרט את הבעיה שלך אולי אוכל לעזור לך קצת כי יצא לי לחקור על הנושא לא מעט בתקופה האחרונה.
webapi2?
משתמשים בתשתית owin או עדיין באמצעות global.asax?
יש לך STS שאליו ניגש המשתמש כדי לקבל את הtoken?
משתמש ב asp.net identity או פיתרון תפור אישית?
איזה flow של oauth אתה מבצע?
אגב שים לב: OAUTH לא מיועד עבור Authentication אלא בעבור Authorization, זה 2 דברים יחסית שונים. עבור AuthN אתה צריך להשתמש בפרוטוקול שנקרא OpenID Connect אשר הוא עצמו מתבסס על flows של oAuth2.
 
הבעיה פשוטה.

אני רוצה שמשתמש שנרשם לא יהיה יכול להכנס לאתר, עד שלא קיבל ממני אימייל ולחץ על הלינק. אז הרישום עובד, שליחת המייל עובדת, קבלת הלינק עובדת, הכל בסדר. אבל איך גורמים לרישום לחסום את המשתמש? למה אין לי שליטה על תהליך הרישום? למה הוא כל כך סודי ומוסתר? מה מסובך בלהכניס רשומה לטבלה?
כן, אני משתמש ב owin.
אני שולח token לקליינט, הוא שומר אותו ושולח עם כל פניה לשרת.
כן, משתמש ב asp.net identity .
לגבי ה flow, אני לא יודע בדיוק מה הכוונה. המשתמש נרשם, אני שולח שם וסיסמה ל web api, , אחר כך המשתמש עושה login (פעם ראשונה אני עושה בשבילו), והוא מקבל את הטוקן המיוחל ומאז הוא יכול לגשת לדפים המוגנים.
&nbsp
 
תודה. בהחלט קראתי את זה כמה פעמים,

וכל פעם מחדש לא האמנתי לטימטום. יש שם פסקה עם הכותרת Email Confirmation . ושם הם מסבירים למה צריך אימייל קונפירמיישן. ואז הם אומרים: בדוגמה הבאה, היוזר לא יוכל לשנות את הסיסמה עד שלא יאשר את המייל... (אבל להכנס לאתר הוא יכול).
בגלל שהדברים נעשים מאחורי הקלעים ובאופן מוסתר, קשה לקבל את הפונקציונליות שאתה רוצה, אפילו כמו במקרים די טריויאליים כמו שלי, שזה תסריט ממש מקובל, בעצם סטנדרטי.
הייתי מעדיף לכתוב את הלוגאין בעצמי ולדעת בדיוק מה קורה. הבעיה שאז אני מפסיד הרבה דברים כמו authentication by roles ועוד.
 

nocgod

New member
הבנתי אותך...

http://thekevincode.com/2010/09/adding-email-confirmation-to-asp-net-mvc/
קראתי את מה שהבחור הזה עשה, על פניו נראה כאילו הוא מסביר step by step איך להכניס את הסיפור.
רק שים לב לתאריך של הפוסט, אולי דברים קצת זזו, ואולי גם תשנה את הקוד שלו בהתאם לגרסאת ה #C שאתם כותבים בה

עריכה:
http://kevin-junghans.blogspot.co.il/2013/10/adding-email-confirmation-to-aspnet.html
תציץ גם פה, נראה כאילו הוא מסביר/מסבר על how-to :)
 

Royi Namir

New member
מישהו יכול להגיד לי מה אני מפספס ?

אם הוא שולח TOKEN ב QS , ואני ב MESSAGE HANDLER קורא אותו ובודק VALIDITY
ואם כן - ממשיך את ה PIPE , ואם לא , מקצר אותו.
זה מה שעשיתי באתרים שבניתי
אני מפספס משו ?
 

nocgod

New member
הוא רוצה שמשתמש חדש שנרשם לא יוכל לגשת למערכת

עד שהוא לא עושה confirmation בדוא"ל
 

Royi Namir

New member
נו ו.... ? אז הוא פותח USER ב DB שרשום שם IsMailConfirmed=0

ורק כשהוא נכנס מהאימייל( מהלינק) - אז הוא בודק ב MESSAGEHDNALER את ה QS - ומעדכן ב DB.
&nbsp
אני באמת לא מבין למה OWIN וחיות דומות למשימה כזו.
הרי אפשר ב ONAUTHORIZE להכניס את כל ה לוגיקת בדיקה . ושם זה צריך להיות.
סורי , אבל שוב - האם פספסתי משו ?
&nbsp
 

nocgod

New member
אני חושב שבגלל שהוא משתמש ב asp.net identity הוא לא יכול

ולשאר הדברים אין קשר, שאלתי כי חשבתי שהוא עושה משהו אחר.
 
הקוד הזה בהחלט מעניין, אני אבדוק אותו,

אולי זה יפתור את הבעיה. תודה.
&nbsp
 
טכנית אתה צודק, בפועל זה לא עוזר לי

כי הלוגאין עצמו לא מבוצע שם אלא מועבר הלאה. כמו שאמר nocgod, זה מוסתר בכוונה. ואני לא אוהב את זה. לא אוהב יותר מדי נעלמים במשוואה. עד שני נעלמים אני איכשהו מסתדר, לא יותר מזה. אבל תודה, זה סיפק איזו הצצה מעניינת.
 
אתה יכול להכניס את זה שם

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

אבל הנה קישור [URL]http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-and-password-reset[/URL]
למדריך שמסביר איך להוסיף אימות באמצעות מייל, ובאמצע הוא גם מסביר איך להוסיף בLogin את הקוד שצריך כדי שאם המשתמש לא אימת את המייל עם הטוקן - הוא יישאר בחוץ.
אם הבנתי אותך נכון אז זה מה שחיפשת, נראה לי שזה מתאים גם לweb-api2 כי מערכת ניהול המשתמשים היא אותה מערכת (כמדומני..).
שורות הקוד הרלוונטיות בשבילך הם אלו:
קוד:
  // Require the user to have a confirmed email before they can log on.
    var user = await UserManager.FindByNameAsync(model.Email);
    if (user != null)
    {
       if (!await UserManager.IsEmailConfirmedAsync(user.Id))
       {
          ViewBag.errorMessage = "You must have a confirmed email to log on.";
          return View("Error");
       }
    }
בהצלחה!!
 
למעלה