پروژه SSO


سناریو کلی :

  1. پس از redirect شدن کاربر به سمت سامانه بر روی آدرس oauth/authorize/ کاربر را به / ریدارکت می‌کنیم و کنترلری برای اینکار نوشته شده که index.html حاوی انگولار را بر می‌گرداند.
  2. بعد از لود شدن صفحه انگولار درخواستی تحت عنوان initiate-login داده می‌شود و در پاسخ در صورت موفقیت آمیز درخواست send/otp داده می‌شود
  3. پس از وارد کردن کد پیامکی توسط کاربر سرویس authenticate/first-page/ فراخوانی می‌شود و در صورت موفقیت آمیز بودن کلاینت درخواست آخر برای احرازهویت یعنی /login را می‌زند.
  4. در پاسخ این درخواست کاربر هدایت می‌شود به آدرس oauth/authorize/ که اول درخواست آن را داده بود و پس از آن به نهادمتکی که از آنجا اومده بود هدایت می‌شود.

جزئیات مراحل :


سرویس initiate login 

آدرس سرویس : initiate-login/

بدنه درخواست : ندارد

متد : POST

پاسخ : 

{
    "user_info": {
        "mobile_number": "",
        "national_number": "",
        "loa": ""
    },
    "client_info": {
        "scope_titles": "",
        "client_name": "",
        "client_logo": "we dont need client id and download address any more"
    },
    "error": {
        "next_page": "it can be current or error or any page , if it is current stay there and toast the reason and if it is error page print it on the error page dont need to toast but for another pages toast the reason",
        "reason": ""
    },
    "success": {
        "next_page": "otp",
        "ready_for_firstpage_authenticate": false,
        "ready_for_final_authenticate": false
    }
}


توضیح پاسخ :

  1. در قسمت user_info اطلاعات کاربر قرار دارد
  2. در قسمت client_info اطلاعات نهاد متکی قراردارد و دیگر نیازی به فراخوانی سرویس download برای logo نیستیم و در همین پاسخ برگردانده می‌شود
  3. در قسمت error در صورتی که خطایی رخ داده باشد این فیلد در پاسخ قرار می‌گیرد و در صورت موفقیت آمیز بودن درخواست اثری از آن نیست
    1. فیلد next_page : وقتی برابر صفحه error باشد حالتی است که در آن باید کاربر را به صفحه error برد و در آنجا مقدار فیلد reason را در آن صفحه نشان داد.
    2. فیلد next_page : وقتی برابر صفحه ای مثل login, otp  و یا push otp باشد باید مقدار خطا را در آن صفحه به صورت toast نشان دهد (اگر مقدار فیلد next_page با صفحه جاری برابر بود به طبع دیگر نیازی به تغییر صفحه نیست و همانجا باید پیام خطا toast شود) 
    3. فیلد reason : نشان دهنده دلیل خطاست.
  4. در قسمت success :