تمامی سرویسها نیاز است که مقدار cookie نشست برروی درخواست موجود باشد پس انگولار بر روی درخواستهای خود cookie را نیز ارسال میکند (نکتهای است که مقدار نشست در لیست cookieها قابل دسترسی در client نیست به علت httppnly بودن و مقدارش را client نمیتواند بفهمد و فقط در هر درخواست cookie را ارسال میکند).
در مورد توکن csrf :
بر روی cookie مقداری به نام XSRF-TOKEN قرار گرفته است که مقدارش برابر با توکن csrf است حال این کوکی دارای httponly برابر با false است بدین معنی که client میتواند به آن دسترسی پیدا کند. پس کلاینت باید مقدار آن را از کوکی خوانده و در هدر درخواستهای POST خود و تحت عنوان X-XSRF-TOKEN قراردهد و سمت سرور برابری مقدار کوکی و هدر درخواست چک میشود
آدرس سرویس : initiate-login/
بدنه درخواست : ندارد
متد : POST
نوع محتوا : application/x-www-form-urlencoded
پاسخ :
{ "next_page": "login", "next_page_action": "http://192.168.1.118:8095/send/otp", "next_page_data": { "login": { "user_info": { "mobile_number": "09124958820", "national_number": "", "loa": "LEVEL_2_2", "mobile_number_input_status": "hidden" }, "client_info": { "scope_titles": "تلفن همراه، کد ملی", "client_name": "ايران", "client_id": "abara" }, "general_info": { "download_address": "http://192.168.1.118:8095/download", "deprecate_address": "http://192.168.1.118:8095/deprecate/" } } }, "ready_for_final_authenticate": false } |
توضیح پاسخ :
با فراخوانی این سرویس مشخص میشود که اصلا کاربر میتواند صفحه لاگین را ببیند یا اگر پاسخ خطا داشت صفحه خطا را ببیند یا صفحه لاگین را با حالت خطا ببیند.
نمونه پاسخ غلط (وقتی کاربر نیاز دارد فرآیند را از اول شروع کند)
{ "next_page": "error", "ready_for_final_authenticate": false, "error": { "reason": "اجازه دسترسی برای شما وجود ندارد، فرآیند را دوباره شروع کنید." } } |
آدرس سرویس : send/otp/
بدنه درخواست : اطلاعات کدملی (national_number) و شماره موبایل (mobile_number) به صورت form-urlencoded
متد : POST
نوع محتوا : application/x-www-form-urlencoded
پاسخ :
{ "next_page": "otp", "next_page_action": "http://192.168.1.118:8095/authenticate/first-page", "next_page_data": { "otp": { "code_expire_time": "45", "otp_address": "http://192.168.1.118:8095/send/otp", "mobile_number": "09121234567" } }, "ready_for_final_authenticate": false } |
توضیح پاسخ :
آدرس سرویس : authenticate/first-page/
بدنه درخواست : کد واردشده (code) و اطلاعات کدملی (national_number) و شماره موبایل (mobile_number) به صورت form-urlencoded
متد : POST
نوع محتوا : application/x-www-form-urlencoded
پاسخ :
{ "next_page": "otp", "next_page_action": "http://192.168.1.118:8095/login", "ready_for_final_authenticate": true } |
توضیح پاسخ :
پاسخ خطا ( در صورتی که کاربر بیش از حد کد پیامکی را اشتباه واردکند و نیاز باشد صفحه pushotp نمایش دادهشود)
{ "next_page": "push_otp", "next_page_action": "http://192.168.1.118:8095/authenticate/first-page", "next_page_data": { "push_otp": { "code_expire_time": "173", "otp_address": "http://192.168.1.118:8095/send/otp", "push_code_value": "108460", "mobile_number": "09121234567", "push_code_provider": "لطفا با شماره گیری *725# کد را به سامانه سماوا ارسال فرمایید", "push_otp_check_status_interval": 2 } }, "ready_for_final_authenticate": false, "error": { "reason": "کد اشتباه ارسال شده و تعداد دفعات خطا 1 میباشد" } } |
پاسخ خطا (در صورتی که شاهکار اطلاعات کاربر را قبول نکند)
{ "next_page": "login", "next_page_data": { "login": { "user_info": { "mobile_number": "09124958820", "national_number": "0050390503", "loa": "LEVEL_2_2", "mobile_number_input_status": "hidden" }, "client_info": { "scope_titles": "تلفن همراه، کد ملی", "client_name": "ايران", "client_id": "abara" }, "general_info": { "download_address": "http://192.168.1.118:8095/download", "deprecate_address": "http://192.168.1.118:8095/deprecate/" } } }, "ready_for_final_authenticate": false, "error": { "reason": "این شماره موبایل با کدملی سازگار نمی باشد. تعداد دفعات خطا 1" } } |
در این حالت کاربر صفحه لاگین را میبیند و در آنجا پیام خطا toast میشود و اطلاعات موردنیاز هر صفحه در قسمت next_page_data قرار میگیرد.
پاسخ خطا (در صورتی که کد پیامکی اشتباه زده باشد)
{ "next_page": "otp", "next_page_action": "http://192.168.1.118:8095/authenticate/first-page", "next_page_data": { "otp": { "code_expire_time": "20", "otp_address": "http://192.168.1.118:8095/send/otp", "mobile_number": "09124958820" } }, "ready_for_final_authenticate": false, "error": { "reason": "کد به درستی وارد نشده است. تعداد دفعات خطا 1" } } |
در این حالت کاربر در صفحه otp میماند و پیام خطا نشان داده میشود.
پاسخ درست (حالتی که مرحله بعد صفحه تشخیص چهره باشد)
{ "next_page": "facedetection", "next_page_action": "http://192.168.1.118:8095/authenticate/face-decetion", "next_page_data": { "facedetection": { ... } }, "ready_for_final_authenticate": false } |
در این حالت کاربر به صفحه تشخیص چهره هدایت میشود
آدرس سرویس : login/
بدنه درخواست : ندارد
متد : POST
نوع محتوا : application/x-www-form-urlencoded
پاسخ : اگر پاسخ با وضعیت 302 دریافت شد نشان دهندهی موفقیت آمیز بودن عملیات است و کاربر باید ریدایرکت شود ولی اگر پاسخ دیگری دریافت شد نشان دهندهی خطاست وهمانند پاسخهای خطای سرویسهای قبلی با آن رفتار شود.