تفاوت میان نسخههای «CAS Development»
[نسخهٔ بررسینشده] | [نسخهٔ بررسینشده] |
(صفحهای تازه حاوی «{{Badge|توجه}} {{TODO|اینجا باید یک متن مناسب اضافه شود}}منبع دوم <ref>[https://ali.com پیوند]<...» ایجاد کرد) |
L.hokmabadi (بحث | مشارکتها) |
||
خط ۸: | خط ۸: | ||
جهت سهولت در ورود و خروج کاربران از سامانههای مختلف و حل مشکل فوق، از سرویسهای SSO یا یکبار ورود استفاده میشود. این سرویسها پروتکلهای مختلفی را اصولاً پوشش میدهند که شامل CAS, OAuth2, SAML و یا بصورت وبسرویس Restful خواهد بود. سامانهها در صورتی که بر روی یک پروتکل مشترک احراز هویت را انجام دهند توسط Ticket صادره از سرویس SSO میتوانند اعتبار ورود کاربر را بررسی نموده و در صورتی که ticket مربوطه هنوز معتبر باشد امکان و اجازه ورود کاربر را بدون وارد نمودن نام کاربر و رمز عبور بدهند. در هنگام خروج یک کاربر از یک سامانه نیز با استفاده از SLO یا یکبار خروج و اعلام آن به سرویس SSO میتوان ticket مربوطه را بیاعتبار کرد و دسترسی کاربر از همه سامانهها به جهت امنیت قطع خواهد شد. | جهت سهولت در ورود و خروج کاربران از سامانههای مختلف و حل مشکل فوق، از سرویسهای SSO یا یکبار ورود استفاده میشود. این سرویسها پروتکلهای مختلفی را اصولاً پوشش میدهند که شامل CAS, OAuth2, SAML و یا بصورت وبسرویس Restful خواهد بود. سامانهها در صورتی که بر روی یک پروتکل مشترک احراز هویت را انجام دهند توسط Ticket صادره از سرویس SSO میتوانند اعتبار ورود کاربر را بررسی نموده و در صورتی که ticket مربوطه هنوز معتبر باشد امکان و اجازه ورود کاربر را بدون وارد نمودن نام کاربر و رمز عبور بدهند. در هنگام خروج یک کاربر از یک سامانه نیز با استفاده از SLO یا یکبار خروج و اعلام آن به سرویس SSO میتوان ticket مربوطه را بیاعتبار کرد و دسترسی کاربر از همه سامانهها به جهت امنیت قطع خواهد شد. | ||
+ | ==<div style="text-align:center;">'''فهرست'''</div>== | ||
+ | <div style="text-align:right;">مقدمه</div><div style="text-align:right;">1- پروتکل CAS4</div><div style="text-align:right;">2- کارکرد CAS5</div> | ||
+ | |||
+ | :<div style="text-align:right;">1- مرورگر کاربر</div> | ||
+ | |||
+ | :<div style="text-align:right;">2- نرمافزار تحت وب</div> | ||
+ | |||
+ | :<div style="text-align:right;">3- سرور SSO با پشتیبانی از CAS6</div><div style="text-align:right;">3- نحوه اتصال</div><div style="text-align:right;">4- Initial request (مرحله یک)</div><div style="text-align:right;">5- هدایت به صفحه ورود CAS (مرحله دو)</div><div style="text-align:right;">6- بررسی TGT در مرورگر (مرحله سه)</div><div style="text-align:right;">7- ارسال صفحه ورود به مرورگر توسط CAS (مرحله چهار)10</div><div style="text-align:right;">8- ارسال اطلاعات ورود به سرویس CAS (مرحله پنج)</div><div style="text-align:right;">9- برگشت کاربر به صفحه نرمافزار (مرحله شش)</div><div style="text-align:right;">10- درخواست مجدد مرورگر برای اتصال به نرمافزار بهمراه CAS service ticket (مرحله هفت)</div><div style="text-align:right;">11- چک صحت CAS service ticket (مرحله هشت)</div><div style="text-align:right;">12- جواب سرویس CAS به چک صحت ticket (مرحله نه)</div><div style="text-align:right;">13- ارسال صفحه نرمافزار (مرحله ده)</div><div style="text-align:right;">14- تنظیمات CAS client</div> | ||
+ | =مقدمه= | ||
+ | <div style="text-align:right;">امروزه تعدد سامانههای نرمافزاری مختلف برای کاربران یک مشکل بزرگ ایجاد کرده است. هر کاربر میبایست نامهای کاربری و رمزهای عبور مختلفی را به خاطر بسپارد و از آنها جهت ورود استفاده کند. اکثر سامانههای نرمافزاری نیز برای سهولت از بانک اطلاعاتی خود جهت مدیریت کاربران استفاده میکنند. این امر باعث میشود تا اطلاعات کاربران بارها در سامانههای مختلف تکرار شود و حتی بعضا به علت تعدد تکرار به صورت اشتباه هم وارد شود. | ||
+ | بسیاری از سازمانها جهت حل این مشکل از سرویسهایی بر پایه LDAP استفاده میکنند تا هویت کاربران یکپارچه شود و از تعدد نام کاربری و رمز عبور جلوگیری شود. کارکرد این سرویس نیازمند اتصال همه سامانههای نرمافزاری به پروتکل LDAP جهت احراز هویت هست. اگر چه مشکل تعدد نام کاربری حل میشود اما مشکل دیگری ایجاد میشود. تصور کنید که یک کاربر روزانه به ۱۰ سامانه نرمافزاری مختلف میخواهد متصل شود و رمز کاربر نیز پیچیده باشد. کاربر حداقل ۱۰ بار باید نام کاربری و رمز عبور خود را وارد کند تا بتواند از این سامانهها استفاده کند. اگر این مقدار را با تعداد کابران محاسبه کنیم به حجم بسیار بالایی از ورود خواهیم رسید. | ||
+ | |||
+ | جهت سهولت در ورود و خروج کاربران از سامانههای مختلف و حل مشکل فوق، از سرویسهای SSO یا یکبار ورود استفاده میشود. این سرویسها پروتکلهای مختلفی را اصولاً پوشش میدهند که شامل CAS, OAuth2, SAML و یا بصورت وبسرویس Restful خواهد بود. سامانهها در صورتی که بر روی یک پروتکل مشترک احراز هویت را انجام دهند توسط Ticket صادره از سرویس SSO میتوانند اعتبار ورود کاربر را بررسی نموده و در صورتی که ticket مربوطه هنوز معتبر باشد امکان و اجازه ورود کاربر را بدون وارد نمودن نام کاربر و رمز عبور بدهند. در هنگام خروج یک کاربر از یک سامانه نیز با استفاده از SLO یا یکبار خروج و اعلام آن به سرویس SSO میتوان ticket مربوطه را بیاعتبار کرد و دسترسی کاربر از همه سامانهها به جهت امنیت قطع خواهد شد | ||
+ | |||
+ | در ادامه به نحوه چگونگی اتصال و اعتبارسنجی این سرویس میپردازیم. | ||
+ | </div> | ||
+ | =پروتکل CAS= | ||
+ | <div style="text-align:right;">یکی از پروتکلهایی که برای تکنولوژی SSO استفاده میگردد، CAS نام دارد که مخفف Central Authentication Service هست. این پروتکل توسط شرکت Apereo ابداع شده است و برای زبانهای مختلف برنامهنویسی کتابخانه داشته و استفاده از آن سهولت زیادی نسبت به سایر پروتکلها دارد که دلیل آن کتابخانههای خوبی هست که در سمت سرویسگیرنده فراهم شده است. کتابخانههای CAS محدود به زبانهای برنامهنویسی نیستند و در وبسرورهایی مانند Apache نیز این کتابخانهها وجود دارند که به نام mod_auth_cas شناخته میشود و یا حتی در سیستمعامل لینوکس برای PAM نیز کتابخانه pam_cas وجود دارد.</div><div style="text-align:right;">برای دریافت این کتابخانهها بسته به نوع زبان میتوان از مسیر کلی https://github.com/apereo استفاده نمود. یا به عنوان نمونه طبق جدول زیر میتوان کتابخانهها را دریافت نمود. مستندات کامل هر کتابخانه نیز در آدرس مربوطه وجود دارد</div> | ||
+ | {| style="border-spacing:0;margin:auto;width:7.6035in;" | ||
+ | |- | ||
+ | | align="right" style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |ردیف | ||
+ | | align="right" style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |زبان برنامهنویسی | ||
+ | | align="right" style="border:0.05pt solid #000000;padding:0.0382in;" |آدرس کتابخانه کلاینت | ||
+ | |- | ||
+ | | align="right" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |1 | ||
+ | | align="center" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |Java | ||
+ | | align="right" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.0382in;" |https://github.com/apereo/java-cas-client | ||
+ | |- | ||
+ | | align="right" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |2 | ||
+ | | align="center" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |.Net | ||
+ | | align="right" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.0382in;" |https://github.com/apereo/dotnet-cas-client | ||
+ | |- | ||
+ | | align="right" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |3 | ||
+ | | align="center" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |PHP | ||
+ | | align="right" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.0382in;" |https://github.com/apereo/phpCAS | ||
+ | |- | ||
+ | | align="right" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |4 | ||
+ | | align="center" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.0382in;" |Python | ||
+ | | align="right" style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.0382in;" |https://github.com/python-cas/python-cas | ||
+ | |- | ||
+ | |}<div style="text-align:right;"></div><div style="text-align:right;">همچنین لازم به ذکر است که بسیاری از برنامههای متنباز مانند Drupal, Mediawiki و … بصورت پیشفرض از مدل احراز هویت مبتنی بر CAS استفاده میکنند و تنها تنظیماتی که در ادامه این سند ذکر میشود برای کارکرد آنها کفایت میکند.</div> | ||
+ | =کارکرد CAS= | ||
+ | <div style="text-align:right;">در اینجا به نحوه کارکرد CAS میپردازیم. در ابتدا اشاره به این نکته ضروری است که سرویس SSO ممکن است به همه برنامهها دسترسی بدهد یا آن را محدود به آدرسهای خاصی کند. بر روی سرویس SSO که در اینجا گفته شده است، دسترسی به آدرسهای مشخصی محدود شده است. بنابراین اگر با خطای زیر مواجه شدید یعنی اینکه دسترسی برای شما برای service URL درخواست شده امکانپذیر نیست. در ادامه توضیحات بیشتری در مورد service URL ذکر خواهد شد.</div><div style="text-align:right;">[[Image:Image1.png]]</div><div style="text-align:right;">در سمت سرویس مدیریت CAS دو نوع دسترسی اصولاً تعریف میشود. اول دسترسی اتصال به سرویس SSO و دوم هم سایر پارامترها و اطلاعاتی که از سمت این سرویس در مورد کاربر به درخواست کننده برگشت داده میشود.</div><div style="text-align:right;">در سرویس CAS سه قسمت اصلی وجود دارد:</div>#<div style="text-align:right;">مرورگر کاربر</div> | ||
+ | |||
+ | #<div style="text-align:right;">نرمافزار تحت وب</div> | ||
+ | #<div style="text-align:right;">سرور SSO با پشتیبانی از CAS</div> | ||
+ | |||
+ | ==مرورگر کاربر== | ||
+ | <div style="text-align:right;">مرورگر کاربر نقش ارتباطی از سمت کاربر را بر عهده دارد و ticket دریافت شده از سمت SSO در مرورگر کاربر ذخیره میشود و میتواند توسط سایر نرمافزارهای سازمان که به SSO متصل هستند، از این ticket جهت اعتبارسنجی نشست فعلی استفاده شود.</div> | ||
+ | ==نرمافزار تحت وب== | ||
+ | <div style="text-align:right;">این نرمافزار به عنوان یک CAS client تنظیم شده و برای احراز هویت کاربر در صورت عدم وجود ticket در مرورگر به آدرس مشخصی هدایت میشود که بعد از ورود صحیح، کاربر مجدداً به صفحه مشخص شده توسط نرمافزار ارجاع داده میشود. (تقریباً مشابه آنچیزی که در زمان استفاده از کاربر گوگل برای احراز هویت در سایتهای دیگر مشاهده میکنیم)</div> | ||
+ | ==سرور SSO با پشتیبانی از CAS== | ||
+ | <div style="text-align:right;">این سرویس از قسمتهای ذیل تشکل شده است که به تکمیل این فرآیند کمک میکند:</div>#<div style="text-align:right;">ارائه خدمات صفحه ورود و احراز هویت کاربر از یک منبع واحد (دیتابیس، LDAP و غیره)</div> | ||
+ | |||
+ | #<div style="text-align:right;">صدور کوکی TG<ref name="ftn1"><div style="text-align:right;">ticket granting ticket</div></ref> جهت عدم نیاز به ورود مجدد کاربر در موارد بعدی که به سمت سرور CAS هدایت میشود (هر نرمافزار جهت کنترل اعتبار ورود کاربر، مرورگر را به سمت آدرس وب سرویس CAS هدایت میکند و در صورتی که تیکت کاربر معتبر باشد، مجدداً از سمت CAS کاربر به سامانه اصلی هدایت میشود. لذا در این فرآیند کاربری که قبلاً وارد شده است نیازی به ورود مجدد ندارد و متوجه این امر نخواهد شد و این همان سهولتی هست که در کنار امنیت برای کاربر به ارمغان میآید)</div> | ||
+ | #<div style="text-align:right;">امکان هدایت و برگشت به نرمافزار تحت وب با تنظیم ticket=ST-XXX در url مربوطه برای اینکه به عنوان CAS client بتواند تیکت را بررسی کند</div> | ||
+ | #<div style="text-align:right;">اعتبارسنجی تیکت صادر شده توسط کتابخانه CAS برای اطمینان نرمافزار از صحت ورود کاربر و اعتبار تیکت آن</div> | ||
+ | |||
+ | =نحوه اتصال= | ||
+ | <div style="text-align:right;">در شک ذیل نحوه اتصال به سرویس CAS مشاهده میشود تا بتوانیم بهتر فرآیند آن را درک کنیم.</div><div style="text-align:right;">[[Image:Image2.png]]</div><div style="text-align:right;">برای مشاهده دیاگرامهای دقیقتر و بهمراه کدهای HTTP مربوطه میتوان به لینک زیر مراجعه کرد</div>https://apereo.github.io/cas/5.2.x/protocol/CAS-Protocol.html<div style="margin-left:0in;margin-right:0in;"></div> | ||
+ | =Initial request (مرحله یک)= | ||
+ | |||
+ | *<div style="text-align:right;">نرمافزار sampleapp به عنوان CAS client تنظیم شده است تا مثلاً روی آدرس test/ احراز هویت را انجام دهد</div> | ||
+ | *<div style="text-align:right;">کاربر از طریق مرورگر به test/ متصل میشود</div> | ||
+ | *<div style="text-align:right;">اگر مرورگر در حال حاضر بر روی نرمافزار sampleapp هیچ نشستی نداشته باشد، sampleapp کنترل را بدست کتابخانه CAS میدهد</div> | ||
+ | *<div style="text-align:right;">اگر کتابخانه CAS پارامتر تیکت را در درخواست مشاهده نکند، کاربر را به صفحه ورود CAS هدایت میکند و در انتهای آن عبارت service=url_to_return_to را اضافه میکند که این مقدار برابر آدرسی هست که قرار هست بعد از ورود صحیح، کاربر مجدداً به سمت آن هدایت شود.در مثال مد نظر ما مثلاً آدرس http://localhost:8080/sampleapp/test خواهد بود که url نهایی به شکل ذیل هست:</div> | ||
+ | |||
+ | [https://accounts.uast.ac.ir/cas/login?service=http://localhost:8080/sampleapp/test https://accounts.][https://accounts.uast.ac.ir/cas/login?service=http://localhost:8080/sampleapp/test example.com][https://accounts.uast.ac.ir/cas/login?service=http://localhost:8080/sampleapp/test /cas/login?service=http://localhost:8080/sampleapp/test]<div style="text-align:right;">اگر این آدرس http://localhost:8080/sampleapp/test در سیستم مدیریت CAS به عنوان آدرس مجاز تعریف نشده باشد پیام Application Not Authorized to Use CAS دیده میشود. لذا حتماً بایستی آدرس مد نظر نرمافزار خود را به مدیر سیستم اعلام کنید تا در سرویس CAS تعریف شده و دسترسی شما مجاز باشد.</div> | ||
+ | =هدایت به صفحه ورود CAS (مرحله دو)= | ||
+ | |||
+ | *<div style="text-align:right;">کاربر به صفحه ورود CAS جهت احراز هویت انتقال داده میشود. فرم ورود مربوط به صفحه CAS روی مرورگر کاربر نمایش داده خواهد شد.</div> | ||
+ | *<div style="text-align:right;">در این مرحله کاربر میبایست نام کاربری و رمز عبور خود را واردکند. در سمت راست صفحه نیز نام و توضیحات برنامهای که کاربر از آن به سمت صفحه ورود هدایت شده است نمایش داده میشود. مانند تصویر زیر:</div><div style="text-align:right;">[[Image:Image3.png]]</div><div style="text-align:right;">در تصویر فوق ما از نرمافزاری با عنوان CAS Management به این صفحه هدایت شدهایم. این موارد توسط مدیر سیستم به عنوان نام و توضیحات نرمافزار مجاز تعریف شده، تعیین میشود.</div> | ||
+ | =بررسی TGT در مرورگر (مرحله سه)= | ||
+ | |||
+ | *<div style="text-align:right;">در این مرحله مقدار CASTGC cookie که در سمت سرور با نام TGT تولید شده است چک میشود. اگر چنین مقداری در مرورگر در همان لحظه وجود داشته باشد، یعنی اینکه کاربر توسط CAS قبلاً احراز هویت شده است و از اینجا به مرحله شش خواهد رفت و به نرمافزار مجاز با مشخص نمودن مقدار service ticket برگشت داده خواهد شد.</div> | ||
+ | *<div style="text-align:right;">اگر هیچ CASTGC وجود نداشته باشد، صفحه ورود CAS در مرورگر نمایش داده خواهد شد.</div> | ||
+ | |||
+ | =ارسال صفحه ورود به مرورگر توسط CAS (مرحله چهار)= | ||
+ | <div style="text-align:right;">یکی از خوبیهای این قسمت این مسأله هست که برنامهها نیازی به نمایش صفحه ورود به کاربرها ندارند و همه نرمافزارهای سازمان از یک صفحه ورود یکسان استفاده میکنند. مشابه آنچه در سیستم SSO گوگل با آدرس [https://accounts.google.com/ https://accounts.google.com] مشاهده میکنید.</div>*<div style="text-align:right;">عدم نیاز به مدیریت صفحه ورود توسط هر نرمافزار</div> | ||
+ | |||
+ | *<div style="text-align:right;">عدم نیاز به اتصال به سیستمهای بانک اطلاعاتی و یا LDAP و غیره جهت احراز هویت توسط هر نرمافزار</div> | ||
+ | *<div style="text-align:right;">عدم اطلاع از رمز عبور کاربر توسط هر نرمافزار. رمز وارد شده توسط کاربر فقط در اختیار مرورگر و سرویس CAS هست که امنیت بالاتری را خواهد داشت</div> | ||
+ | |||
+ | =ارسال اطلاعات ورود به سرویس CAS (مرحله پنج)= | ||
+ | |||
+ | *<div style="text-align:right;">سرویس CAS اطلاعاتی که با متود POST توسط مرورگر به آن ارسال شده است را چک میکند و اگر احراز هویت انجام نشود مجدداً صفحه ورود را به کاربر نشان میدهد.</div> | ||
+ | *<div style="text-align:right;">تعداد کمی احراز هویت اشتباه در زمان کوتاه باعث قفل شدن کاربر میشود و سایر احراز هویتهای بعدی تا ۱۵ دقیقه بدون موفقیت خواهد بود تا از حملات تحت وب جلوگیری شود.</div> | ||
+ | |||
+ | =برگشت کاربر به صفحه نرمافزار (مرحله شش)= | ||
+ | |||
+ | *<div style="text-align:right;">یک ticket granting ticket که به آن TGT میگوییم و به عنوان نمونه مشابه رشته ذیل هست توسط سرویس CAS سمت سرور ذخیره خواهد شد و روی مرورگر نیز یک کوکی با نام CASTGC تنظیم میشود</div> | ||
+ | |||
+ | TGT-1-wKQjkOhweJE6MMTNCqTwv6WojMDBL61GISejnyCfigrMFCumYu-accounts.example.com*<div style="text-align:right;">یک service ticket صادر میشود و به عنوان یک پارامتر به آدرس نرمافزار ارائه شده در زمان هدایت به CAS برگشت داده میشود. (در مرحله یک توضیح داده شده است) این تیکت مشابه زیر خواهد بود. در این مثال فرض شده است که آدرس نرمافزار ما http://localhost:8080/sampleapp/test هست</div>ST-1-bdgbwHIReBonmaudvxJl-accounts.example.com | ||
+ | =درخواست مجدد مرورگر برای اتصال به نرمافزار بهمراه CAS service ticket (مرحله هفت)= | ||
+ | |||
+ | *<div style="text-align:right;">در حال حاضر هنوز نشست نرمافزار کامل برقرار نشده است. در این مرحله کتابخانه CAS وارد عمل کنترل میشود.</div> | ||
+ | *<div style="text-align:right;">کتابخانه CAS پارامتر تیکت را در url مشاهده میکند و میتواند آن را با سرویس CAS چک کند.</div> | ||
+ | *<div style="text-align:right;">CAS service ticket تنها یکبار معتبر خواهد بود و کتابخانه CAS میتواند از آن ظرف ۹۰ ثانیه استفاده کند و صحت آن را چک کند یا اینکه آن expire خواهد شد و عملیات مرحله شش دوباره میبایست انجام شود.</div> | ||
+ | |||
+ | =چک صحت CAS service ticket (مرحله هشت)= | ||
+ | |||
+ | *<div style="text-align:right;">کتابخانه CAS برای چک کردن تیکت آماده میشود و درخواست زیر را به عنوان نمونه بر حسب آدرس نرمافزار ارسال میکند:</div> | ||
+ | |||
+ | https://accounts.example.com/cas/serviceValidate?ticket=ST-1-bdgbwHIReBonmaudvxJl-accounts.example.com&service=http%3A%2F | ||
+ | |||
+ | %2Flocalhost%3A8080%2Fsampleapp%2Ftest%2F*<div style="text-align:right;">در صورتی که این تیکت از سمت سرور CAS تأیید شود، کد ۲۰۰ به سمت مرورگر برگشت داده میشود.</div><div style="text-align:right;"></div> | ||
+ | =جواب سرویس CAS به چک صحت ticket (مرحله نه)= | ||
+ | |||
+ | *<div style="text-align:right;">در ذیل یک نمونه جواب CAS را مشاهده میکنیم. به مقادیر برگشت داده شده مانند email, lastname, firstname و غیره در تگ cas:attributes توجه کنید. اینها همان پارامترهایی از کاربر هستند که به نرمافزار مربوطه مجوز مشاهده آنها داده شده است. لذا بسته به نیاز هر برنامه میبایست به مدیر سیستم درخواست دهید تا پارامترهای مورد نیاز را در سمت سیستم مدیریت CAS تعریف کند.</div> | ||
+ | |||
+ | <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'><div style="margin-left:0.5in;margin-right:0in;"><cas:authenticationSuccess></div><div style="margin-left:1in;margin-right:0in;"><cas:user>mohsen</cas:user></div><div style="margin-left:1in;margin-right:0in;"><cas:attributes></div><div style="margin-left:1.5in;margin-right:0in;"><cas:email>mohsen@mbs.co.ir</cas:email></div><div style="margin-left:1.5in;margin-right:0in;"><cas:lastname>Saeedi</cas:lastname></div><div style="margin-left:1.5in;margin-right:0in;"><cas:firstname>Mohsen</cas:firstname></div><div style="margin-left:1.5in;margin-right:0in;"><cas:fullname>Mohsen Saeedi</cas:fullname></div><div style="margin-left:1.5in;margin-right:0in;"><cas:uid>0012345678</cas:uid></div><div style="margin-left:1in;margin-right:0in;"></cas:attributes></div><div style="margin-left:0.5in;margin-right:0in;"></cas:authenticationSuccess></div></cas:serviceResponse> | ||
+ | =ارسال صفحه نرمافزار (مرحله ده)= | ||
+ | |||
+ | *<div style="text-align:right;">در این مرحله کاربر به صفحه نهایی هدایت میشود و میتواند از نرمافزار sampleapp استفاده کند.</div> | ||
+ | |||
+ | =تنظیمات CAS client= | ||
+ | <div style="text-align:right;">در کتابخانههای زبانهایی که برنامه CAS client را دارند، فایل تنظیماتی بسته به نوع زبان وجود دارد که آدرس سرویسدهنده و سایر پارامترهای مربوطه را میتوان در آن تنظیم نمود. جهت این مسأله به مستندات کتابخانه CAS مربوطه میتوان رجوع کرد. در زمان ارتباط با سرویس CAS اطلاعات مربوط به اتصال و آدرس آن توسط مدیر سیستم در اختیار شما قرار خواهد گرفت.</div> | ||
+ | ----<references /> | ||
{| class="wikitable sortable mw-collapsible mw-collapsed" | {| class="wikitable sortable mw-collapsible mw-collapsed" |
نسخهٔ ۶ مهٔ ۲۰۲۰، ساعت ۰۴:۴۵
توجه
اینجا باید یک متن مناسب اضافه شود منبع دوم [۱]
امروزه تعدد سامانههای نرمافزاری مختلف برای کاربران یک مشکل بزرگ ایجاد کرده است. هر کاربر میبایست نامهای کاربری و رمزهای عبور مختلفی را به خاطر بسپارد و از آنها جهت ورود استفاده کند. اکثر سامانههای نرمافزاری نیز برای سهولت از بانک اطلاعاتی خود جهت مدیریت کاربران استفاده میکنند. این امر باعث میشود تا اطلاعات کاربران بارها در سامانههای مختلف تکرار شود و حتی بعضا به علت تعدد تکرار به صورت اشتباه هم وارد شود.
امروزه تعدد سامانههای نرمافزاری مختلف برای کاربران یک مشکل بزرگ ایجاد کرده است. هر کاربر میبایست نامهای کاربری و رمزهای عبور مختلفی را به خاطر بسپارد و از آنها جهت ورود استفاده کند. اکثر سامانههای نرمافزاری نیز برای سهولت از بانک اطلاعاتی خود جهت مدیریت کاربران استفاده میکنند. این امر باعث میشود تا اطلاعات کاربران بارها در سامانههای مختلف تکرار شود و حتی بعضا به علت تعدد تکرار به صورت اشتباه هم وارد شود.
جهت سهولت در ورود و خروج کاربران از سامانههای مختلف و حل مشکل فوق، از سرویسهای SSO یا یکبار ورود استفاده میشود. این سرویسها پروتکلهای مختلفی را اصولاً پوشش میدهند که شامل CAS, OAuth2, SAML و یا بصورت وبسرویس Restful خواهد بود. سامانهها در صورتی که بر روی یک پروتکل مشترک احراز هویت را انجام دهند توسط Ticket صادره از سرویس SSO میتوانند اعتبار ورود کاربر را بررسی نموده و در صورتی که ticket مربوطه هنوز معتبر باشد امکان و اجازه ورود کاربر را بدون وارد نمودن نام کاربر و رمز عبور بدهند. در هنگام خروج یک کاربر از یک سامانه نیز با استفاده از SLO یا یکبار خروج و اعلام آن به سرویس SSO میتوان ticket مربوطه را بیاعتبار کرد و دسترسی کاربر از همه سامانهها به جهت امنیت قطع خواهد شد.
فهرست
- 1- مرورگر کاربر
- 2- نرمافزار تحت وب
- 3- سرور SSO با پشتیبانی از CAS63- نحوه اتصال4- Initial request (مرحله یک)5- هدایت به صفحه ورود CAS (مرحله دو)6- بررسی TGT در مرورگر (مرحله سه)7- ارسال صفحه ورود به مرورگر توسط CAS (مرحله چهار)108- ارسال اطلاعات ورود به سرویس CAS (مرحله پنج)9- برگشت کاربر به صفحه نرمافزار (مرحله شش)10- درخواست مجدد مرورگر برای اتصال به نرمافزار بهمراه CAS service ticket (مرحله هفت)11- چک صحت CAS service ticket (مرحله هشت)12- جواب سرویس CAS به چک صحت ticket (مرحله نه)13- ارسال صفحه نرمافزار (مرحله ده)14- تنظیمات CAS client
مقدمه
بسیاری از سازمانها جهت حل این مشکل از سرویسهایی بر پایه LDAP استفاده میکنند تا هویت کاربران یکپارچه شود و از تعدد نام کاربری و رمز عبور جلوگیری شود. کارکرد این سرویس نیازمند اتصال همه سامانههای نرمافزاری به پروتکل LDAP جهت احراز هویت هست. اگر چه مشکل تعدد نام کاربری حل میشود اما مشکل دیگری ایجاد میشود. تصور کنید که یک کاربر روزانه به ۱۰ سامانه نرمافزاری مختلف میخواهد متصل شود و رمز کاربر نیز پیچیده باشد. کاربر حداقل ۱۰ بار باید نام کاربری و رمز عبور خود را وارد کند تا بتواند از این سامانهها استفاده کند. اگر این مقدار را با تعداد کابران محاسبه کنیم به حجم بسیار بالایی از ورود خواهیم رسید.
جهت سهولت در ورود و خروج کاربران از سامانههای مختلف و حل مشکل فوق، از سرویسهای SSO یا یکبار ورود استفاده میشود. این سرویسها پروتکلهای مختلفی را اصولاً پوشش میدهند که شامل CAS, OAuth2, SAML و یا بصورت وبسرویس Restful خواهد بود. سامانهها در صورتی که بر روی یک پروتکل مشترک احراز هویت را انجام دهند توسط Ticket صادره از سرویس SSO میتوانند اعتبار ورود کاربر را بررسی نموده و در صورتی که ticket مربوطه هنوز معتبر باشد امکان و اجازه ورود کاربر را بدون وارد نمودن نام کاربر و رمز عبور بدهند. در هنگام خروج یک کاربر از یک سامانه نیز با استفاده از SLO یا یکبار خروج و اعلام آن به سرویس SSO میتوان ticket مربوطه را بیاعتبار کرد و دسترسی کاربر از همه سامانهها به جهت امنیت قطع خواهد شد
در ادامه به نحوه چگونگی اتصال و اعتبارسنجی این سرویس میپردازیم.
پروتکل CAS
ردیف | زبان برنامهنویسی | آدرس کتابخانه کلاینت |
1 | Java | https://github.com/apereo/java-cas-client |
2 | .Net | https://github.com/apereo/dotnet-cas-client |
3 | PHP | https://github.com/apereo/phpCAS |
4 | Python | https://github.com/python-cas/python-cas |
کارکرد CAS
#
- نرمافزار تحت وب
- سرور SSO با پشتیبانی از CAS
مرورگر کاربر
نرمافزار تحت وب
سرور SSO با پشتیبانی از CAS
#
- صدور کوکی TG[۲] جهت عدم نیاز به ورود مجدد کاربر در موارد بعدی که به سمت سرور CAS هدایت میشود (هر نرمافزار جهت کنترل اعتبار ورود کاربر، مرورگر را به سمت آدرس وب سرویس CAS هدایت میکند و در صورتی که تیکت کاربر معتبر باشد، مجدداً از سمت CAS کاربر به سامانه اصلی هدایت میشود. لذا در این فرآیند کاربری که قبلاً وارد شده است نیازی به ورود مجدد ندارد و متوجه این امر نخواهد شد و این همان سهولتی هست که در کنار امنیت برای کاربر به ارمغان میآید)
- امکان هدایت و برگشت به نرمافزار تحت وب با تنظیم ticket=ST-XXX در url مربوطه برای اینکه به عنوان CAS client بتواند تیکت را بررسی کند
- اعتبارسنجی تیکت صادر شده توسط کتابخانه CAS برای اطمینان نرمافزار از صحت ورود کاربر و اعتبار تیکت آن
نحوه اتصال
https://apereo.github.io/cas/5.2.x/protocol/CAS-Protocol.html
Initial request (مرحله یک)
- نرمافزار sampleapp به عنوان CAS client تنظیم شده است تا مثلاً روی آدرس test/ احراز هویت را انجام دهد
- کاربر از طریق مرورگر به test/ متصل میشود
- اگر مرورگر در حال حاضر بر روی نرمافزار sampleapp هیچ نشستی نداشته باشد، sampleapp کنترل را بدست کتابخانه CAS میدهد
- اگر کتابخانه CAS پارامتر تیکت را در درخواست مشاهده نکند، کاربر را به صفحه ورود CAS هدایت میکند و در انتهای آن عبارت service=url_to_return_to را اضافه میکند که این مقدار برابر آدرسی هست که قرار هست بعد از ورود صحیح، کاربر مجدداً به سمت آن هدایت شود.در مثال مد نظر ما مثلاً آدرس http://localhost:8080/sampleapp/test خواهد بود که url نهایی به شکل ذیل هست:
https://accounts.example.com/cas/login?service=http://localhost:8080/sampleapp/test
هدایت به صفحه ورود CAS (مرحله دو)
- کاربر به صفحه ورود CAS جهت احراز هویت انتقال داده میشود. فرم ورود مربوط به صفحه CAS روی مرورگر کاربر نمایش داده خواهد شد.
- در این مرحله کاربر میبایست نام کاربری و رمز عبور خود را واردکند. در سمت راست صفحه نیز نام و توضیحات برنامهای که کاربر از آن به سمت صفحه ورود هدایت شده است نمایش داده میشود. مانند تصویر زیر:در تصویر فوق ما از نرمافزاری با عنوان CAS Management به این صفحه هدایت شدهایم. این موارد توسط مدیر سیستم به عنوان نام و توضیحات نرمافزار مجاز تعریف شده، تعیین میشود.
بررسی TGT در مرورگر (مرحله سه)
- در این مرحله مقدار CASTGC cookie که در سمت سرور با نام TGT تولید شده است چک میشود. اگر چنین مقداری در مرورگر در همان لحظه وجود داشته باشد، یعنی اینکه کاربر توسط CAS قبلاً احراز هویت شده است و از اینجا به مرحله شش خواهد رفت و به نرمافزار مجاز با مشخص نمودن مقدار service ticket برگشت داده خواهد شد.
- اگر هیچ CASTGC وجود نداشته باشد، صفحه ورود CAS در مرورگر نمایش داده خواهد شد.
ارسال صفحه ورود به مرورگر توسط CAS (مرحله چهار)
*
- عدم نیاز به اتصال به سیستمهای بانک اطلاعاتی و یا LDAP و غیره جهت احراز هویت توسط هر نرمافزار
- عدم اطلاع از رمز عبور کاربر توسط هر نرمافزار. رمز وارد شده توسط کاربر فقط در اختیار مرورگر و سرویس CAS هست که امنیت بالاتری را خواهد داشت
ارسال اطلاعات ورود به سرویس CAS (مرحله پنج)
- سرویس CAS اطلاعاتی که با متود POST توسط مرورگر به آن ارسال شده است را چک میکند و اگر احراز هویت انجام نشود مجدداً صفحه ورود را به کاربر نشان میدهد.
- تعداد کمی احراز هویت اشتباه در زمان کوتاه باعث قفل شدن کاربر میشود و سایر احراز هویتهای بعدی تا ۱۵ دقیقه بدون موفقیت خواهد بود تا از حملات تحت وب جلوگیری شود.
برگشت کاربر به صفحه نرمافزار (مرحله شش)
- یک ticket granting ticket که به آن TGT میگوییم و به عنوان نمونه مشابه رشته ذیل هست توسط سرویس CAS سمت سرور ذخیره خواهد شد و روی مرورگر نیز یک کوکی با نام CASTGC تنظیم میشود
TGT-1-wKQjkOhweJE6MMTNCqTwv6WojMDBL61GISejnyCfigrMFCumYu-accounts.example.com*
ST-1-bdgbwHIReBonmaudvxJl-accounts.example.com
درخواست مجدد مرورگر برای اتصال به نرمافزار بهمراه CAS service ticket (مرحله هفت)
- در حال حاضر هنوز نشست نرمافزار کامل برقرار نشده است. در این مرحله کتابخانه CAS وارد عمل کنترل میشود.
- کتابخانه CAS پارامتر تیکت را در url مشاهده میکند و میتواند آن را با سرویس CAS چک کند.
- CAS service ticket تنها یکبار معتبر خواهد بود و کتابخانه CAS میتواند از آن ظرف ۹۰ ثانیه استفاده کند و صحت آن را چک کند یا اینکه آن expire خواهد شد و عملیات مرحله شش دوباره میبایست انجام شود.
چک صحت CAS service ticket (مرحله هشت)
- کتابخانه CAS برای چک کردن تیکت آماده میشود و درخواست زیر را به عنوان نمونه بر حسب آدرس نرمافزار ارسال میکند:
%2Flocalhost%3A8080%2Fsampleapp%2Ftest%2F*
جواب سرویس CAS به چک صحت ticket (مرحله نه)
- در ذیل یک نمونه جواب CAS را مشاهده میکنیم. به مقادیر برگشت داده شده مانند email, lastname, firstname و غیره در تگ cas:attributes توجه کنید. اینها همان پارامترهایی از کاربر هستند که به نرمافزار مربوطه مجوز مشاهده آنها داده شده است. لذا بسته به نیاز هر برنامه میبایست به مدیر سیستم درخواست دهید تا پارامترهای مورد نیاز را در سمت سیستم مدیریت CAS تعریف کند.
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
</cas:serviceResponse>
ارسال صفحه نرمافزار (مرحله ده)
- در این مرحله کاربر به صفحه نهایی هدایت میشود و میتواند از نرمافزار sampleapp استفاده کند.
تنظیمات CAS client
کتابخانه PHP | http |
[root@server ~]# ls -l | grep -i ali
[root@server ~]# command1 run [root@server ~]# command2 run
salam {{badge|1}}
برای کسب اطلاعات بیشتر اینجا را کلیک کنید.%♥♣♠¥₩₮৳₪
مرجع[۱]
- ↑ https://mmbs.co.ir
رده:تست