پروژه SSO
سناریو کلی :
- پس از redirect شدن کاربر به سمت سامانه بر روی آدرس oauth/authorize/ کاربر را به / ریدارکت میکنیم و کنترلری برای اینکار نوشته شده که index.html حاوی انگولار را بر میگرداند.
- بعد از لود شدن صفحه انگولار درخواستی تحت عنوان initiate-login داده میشود که در آن اطلاعات موردنیاز برای صفحه لاگین و آدرس صفحه بعدی داده میشود
- پس از واردنمودن کدملی دکمه ادامه زده میشود که در آن آدرس صفحه بعدی از پاسخ سرویس قبلی فراخوانی میشود که در مرحله اول send/otp/ است
- پس از وارد کردن کد پیامکی توسط کاربر سرویس authenticate/first-page/ فراخوانی میشود و در صورت موفقیت آمیز بودن کلاینت درخواست آخر برای احرازهویت یعنی /login را میزند.
- در پاسخ این درخواست کاربر هدایت میشود به آدرس oauth/authorize/ که اول درخواست آن را داده بود و پس از آن به نهادمتکی که از آنجا اومده بود هدایت میشود.
جزئیات مراحل :
سرویس initiate login
آدرس سرویس : initiate-login/
بدنه درخواست : ندارد
متد : POST
پاسخ :
{ "user_info": { "mobile_number": "", "national_number": "", "loa": "" }, "client_info": { "scope_titles": "", "client_name": "", "client_logo": "base64 of client logo, we dont need client id and download address any more" }, "next_page_action":"/send/otp" }
توضیح پاسخ :
- در قسمت user_info اطلاعات کاربر قرار دارد
- در قسمت client_info اطلاعات نهاد متکی قراردارد و دیگر نیازی به فراخوانی سرویس download برای logo نیستیم و در همین پاسخ برگردانده میشود
- فیلد next_page_action نشان دهنده آدرس دکمه ادامه است.
نمونه پاسخ غلط (وقتی کاربر نیاز دارد فرآیند را از اول شروع کند)
"error": { "next_page": "error", "reason": "user should start process from the begining", "next_page_action":"", "next_page_data":{} }
سرویس ارسال پیامک
آدرس سرویس : send/otp/
بدنه درخواست : اطلاعات کدملی و شماره موبایل
متد : POST
نوع محتوا : application/x-www-form-urlencoded
پاسخ :
"error": { "next_page": "it can be any page or error page", "reason": "error reason", "next_page_action":"/authenticate/first-page", "next_page_data":{} }, "success": { "next_page": "otp", "next_page_action":"/authenticate/first-page" "next_page_data":{ "code_expire_date":12312 }, "ready_for_final_authenticate": false }
توضیح پاسخ :
- در قسمت error در صورتی که خطایی رخ داده باشد این فیلد در پاسخ قرار میگیرد و در صورت موفقیت آمیز بودن درخواست اثری از آن نیست
- فیلد next_page : وقتی برابر صفحه error باشد حالتی است که در آن باید کاربر را به صفحه error برد و در آنجا مقدار فیلد reason را در آن صفحه نشان داد.
- فیلد next_page : وقتی برابر صفحه ای مثل login, otp و یا push otp باشد باید مقدار خطا را در آن صفحه به صورت toast نشان دهد (اگر مقدار فیلد next_page با صفحه جاری برابر بود به طبع دیگر نیازی به تغییر صفحه نیست و همانجا باید پیام خطا toast شود)
فیلد reason : نشان دهنده دلیل خطاست. - فیلد next_page_action : آدرسی که دکمه موجود در آن صفحه حاوی خطا، دربر دارد تا کاربر آن را فراخوانی کند.
- فیلد next_page_data : اطلاعاتی که در آن صفحه حاوی خطا، نیاز است تا در صفحه نمایش داده بشود.
- در قسمت success در صورتی که عملیات با موفقیت انجام شود این فیلد در پاسخ قرار میگیرد.
- فیلد next_page : صفحه بعدی را نشان میدهد .
- فیلد next_page_action : آدرسی که دکمه موجود در صفحه otp برای واردنمودن کد دریافت شده توسط کاربر را نشان میدهد
- فیلد next_page_data : اطلاعاتی که در صفحه آتی (اینجا otp) است را شامل میشود
- فیلد ready_for_final_authenticate : اگر برابر true بود در پاسخ هر سرویسی به منظور آن است که کاربر تمام مراحل احرازهویت موردنظر را به پایان رسانده است و باید درخواست login/ فراخوانی شود. که در جواب این درخواست کاربر redirect میشود.
دکمه ارسال مجدد پیامک در صفحه otp نیز همین سرویس را فراخوانی میکند.
سرویس احرازهویت اطلاعات صفحه اول (first-page)
آدرس سرویس : authenticate/first-page/
بدنه درخواست : کد واردشده
متد : POST
نوع محتوا : application/x-www-form-urlencoded
پاسخ :
"success": { "next_page": "otp", "next_page_action":"/login" "next_page_data":{}, "ready_for_final_authenticate": true }
توضیح پاسخ :
در هر پاسخی وقتی مقدار ready_for_final_authenticate برابر true بود باید login/ فراخوانی شود و کاربر redirect شود.
پاسخ خطا (در صورتی که شاهکار اطلاعات کاربر را قبول نکند)
"error": { "next_page": "login", "reason": "mobile number and national number not matched", "next_page_action":"/authenticate/first-page", "next_page_data":{} }
در این حالت کاربر صفحه لاگین را میبیند و در آنجا پیام خطا toast میشود و چون صفحه اول است درخواست initiate login نیز برای پرکردن اطلاعات صفحه زده میشود.
پاسخ خطا (در صورتی که کد پیامکی اشتباه زده باشد)
"error": { "next_page": "otp", "reason": "otp was incorrect", "next_page_action":"/authenticate/first-page", "next_page_data":{ "code_expire_date":1111 } }
در این حالت کاربر در صفحه otp میماند و پیام خطا نشان داده میشود.
پاسخ درست (حالتی که مرحله بعد صفحه تشخیص چهره باشد)
"success": { "next_page": "facedetection", "next_page_action":"/authenticate/face-decetion" "next_page_data":{...}, "ready_for_final_authenticate": false }
در این حالت کاربر به صفحه تشخیص چهره هدایت میشود