پروژه 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 نشان دهنده آدرس دکمه ادامه است.
سرویس ارسال پیامک
آدرس سرویس : 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
} |
در این حالت کاربر به صفحه تشخیص چهره هدایت میشود