احراز هویت متمرکز

مقدمهاحتمالا تاکنون برای شما پیش آمده است که وارد یک برنامه‌ای شوید و برای استفاده از امکانات آن نیاز به ورود به حساب کاربری داشته باشد. شرکتی که این برنامه را توسعه داده است ممکن است که برنامه‌های دیگری نیز توسعه داده باشد که برای استفاده از آن‌ها نیاز است تا شما وارد حساب خود شوید. برای آنکه منظور خود را بهتر بیان کنم سایت Firebaseکه توسط شرکت گوگل توسعه داده شده است را مثال می‌زنم. برای آنکه از امکانات Firebase استفاده کنید لازم است تا ابتدا وارد حساب کاربری خود شوید. همچنین ممکن است همزمان بخواهید از امکانات موجود در Google Cloud نیز استفاده کنید و در آن‌جا نیز برای استفاده از امکانات آن باید وارد حساب خود شده باشید. نکته در این جا است، هنگامی که شما در یکی از این دو برنامه، (Google Could یا Firebase) وارد حساب خود شوید، دیگر نیاز نیست که اطلاعات ورود یعنی نام کاربری و رمز عبور خود را در دیگری وارد کنید و به طور خودکار شما با وارد کردن تنها یک بار نام کاربری و رمز عبور در یکی از برنامه‌ها در برنامه‌ی دیگر نیز وارد حساب کاربری خود شده‌اید. به این ویژگی، احراز هویت متمرکز (Single Sign Onیا به اختصار SSO) می‌گویند. SSOدرواقع یک تکنولوژی است که صفحات ورود برنامه‌های مختلف را به یک صفحه تبدیل می‌کند. SSO این امکان را فراهم می‌کند تا کاربر تنها یک بار نام‌ کاربری و رمز عبور خود را در یک صفحه وارد کند تا به تمام برنامه‌هایی که به گونه‌ای با هم یکپارچه هستند دسترسی داشته باشد. SSOیکی از جنبه‌های مهم در کنترل، شناسایی و مدیریت دسترسی دانست. از جمله مزیت‌هایی که SSOدارد می‌توان به موارد زیر اشاره کرد:رمزهای عبور قوی: برای وارد شدن به حساب کاربری خود دیگری نیازی نیست چندین رمز عبور برای هر حساب خود ایجاد کنید و تنها با تعیین یک رمز عبور قوی برای یک حساب خود می‌توانید وارد شود. همین امر نیز سبب به یاد ماندن بهتر رمز می‌شودعدم رمز عبور تکراری: وقتی که کابران رمزهای عبوری برای سرویس‌ها و برنامه‌های مختلف باید تعیین کنند وضعیتی به نام فرسودگی رمزعبور (password fatigue) رخ می‌دهد. یعنی کاربر رمز‌ها را در سرویس‌های مختلف استفاده‌ی مجدد می‌کند. که این امر خطر بزرگی به حساب می‌آید زیرا تمام سرویس‌ها با ضعیف‌ترین رمزعبور ایمن هستند. اگر پایگاه داده‌ی رمز‌های عبور هک شود آنگاه حمله کننده می‌تواند وارد تمام برنامه‌ها و سرویس‌ها شود. SSO با کاهش تمام صفحات ورود به یک صفحه‌ی ورود این داستان را حذف کرده است. البته این ویژگی تا حدی به ویژگی قبلی نیز برمی‌گردد که شما یک رمز قوی برای یک حساب کاربری خود انتخاب نموده‌ایداعمال بهتر سیاست‌های رمزگذاری: در SSOتنها یک جا برای وارد کردن رمزعبور است و همین امر اعمال سیاست‌ها و قوانین رمزگذاری برای تیم‌های ITرا راحت‌تر کرده است. به عنوان مثال اگر سیاست‌های یک تیم ITتغییر رمز‌های کاربران به صورت دور‌ه‌ای باشد دیگر نیازی نیست که این کار را برای هر سرویس و برنامه به صورت جداگانه انجام دهنداحراز هویت چند فاکتوره: وارد شدن به کمک یه کد یا یک USB علاوه بر گرفتن نام کاربری و رمزعبور می‌توانند روش‌های دیگر احراز هویت باشند که احراز هویت چند فاکتوره نام دارد. در صورتی که به ازای هر حساب کاربری بخواهیم از این روش استفاده کنیم وقت زیادی گرفته می‌شود و خسته کننده نیز می‌باشد. نکته‌ی دیگر در مورد فعال کردن آن است که اگر بخواهید از این گونه احراز هویت استفاده کنید باید به ازای هر حساب کاربری خود این ویژگی را فعال نمایید. اما به کمک سیستم SSOتنها کافی است که در یک برنامه این امکان را فعال سازید و هنگام وارد شدن در حساب کاربری خود در سایر برنامه‌ها این امکان فعال است. همچنین دیگر نیازی نیست که برای وارد شدن به حساب خود در سرویس‌های مختلف هر بار مراحل مربوط به احراز هویت چندگانه را طی نماییداجبار ورود مجدد رمز عبور در یک نقطه: مدیران سیستم می‌توانند بعد از گذشت مدت زمان معینی از وارد شدن کاربر به حساب کاربر خود کاربر را مجبور به وارد کردن مجدد رمز عبور نمایند تا مطمئن شوند که کاربری که با سیستم کار می‌کند، همان کاربری است که مجوز استفاده از سیستم را دارد یا خیر. با SSOهم کار مدیر سیستم راحت می‌شود زیرا دیگر نیازی نیست که اجبار ورود رمز عبور را برای هرکدام از برنامه‌ها به صورت جداگانه فعال کند و هم کاربر دیگر نیازی نیست که رمز عبور خود را به ازای هر برنامه مجدد وارد نمایدمدیریت اعتبار داخلی بجای ذخیره سازی جانبی: سیستم‌هایی که از SSO استفاده نمی‌کنند رمزهای کاربران را در برنامه‌ها و سرویس‌هایی ذخیره می‌کنند که ممکن است از روش‌های امنیتی مناسبی استفاده نکنند. اما به کمک SSOتمام رمزها دریک فضای امن ذخیره می‌شود که تیم IT کنترل بیشتر و بهتری روی آن دارند و می‌توانند پروتکل‌های امنیتی را بجای آنکه روی هر سرویس به صورت جداگانه اعمال کنند روی تنها یک فضای ذخیره سازی اعمال کنندکاهش زمان بازیابی رمز عبور: سرویس SSO مدت زمان بازیابی رمز عبور را نیز کاهش می‌دهد و برای بازیابی یا فعال سازی مجدد نیازی نیست که برای تمام برنامه رمز عبور خود را بازیابی نمایید و با یک بار انجام داد این کار، رمز عبور شما بازیابی شده و در سایر برنامه‌ها کاربرد داردبرای آنکه بیشتر با سرویس SSOآشنا شویم در ادامه به توضیح عملکرد آن می‌پردازیم.عملکرد SSOهنگامی که یک کاربر در سرویس SSO نام کاربری و رمز عبور خود را وارد می‌کند سرویس یک توکن احراز هویت می‌سازد تا بیاد آورد که کاربرد احراز هویت شده و مورد تایید است. یک توکن احراز هویت درواقع حاوی اطلاعات دیجیتال است که در مرورگر کاربر یا سرورهای سرویس SSOذخیره شده‌اند. هر برنامه که کاربر به آن دسترسی دارد با سرویس SSO چک خواهد شد. این سرویس توکن احراز هویت کاربر را به برنامه ارسال می‌کند و سپس اجازه‌ی ورود کاربر به برنامه داده می‌شود. نکته‌ای که وجود دارد آن است که سرویس SSOخود به تنهایی نمی‌داند که چه کسی وارد سیستم شده است یا به عبارت دیگر کاربری که وارد شده، چه کسی است زیرا مشخصات و هویت کاربر را ذخیره نمی‌کند. درواقع اکثر سرویس‌های SSOبه وسیله‌ی چک کردن اعتبارهای کاربر در مقابل یک سرویس مدیریت هویت کار می‌کنند. توکن‌های احراز هویت SSOیک رشته‌ای از حروف و اعداد هستند که یک ساختار و استاندارد مشخصی دارند و سرویس SSO چک می‌کند که آیا این توکن صحیح و قاتونی است یا خیر. معیار قانونی بودن یک توکن نیز میزان تطابق توکن دریافتی با ساختار و استاندارد تعریف شده است.در حال حاضر شرکت‌های بزرگی در حال ارائه‌ی این سرویس هستند مانند Cloud Flare اما پروژه‌هایی هم هستند که به صورت متن باز این سرویس را در اختیار کاربران قرار می‌دهند و سازمان‌هایی که تیم توسعه‌ی نرم‌افزار دارند می‌توانند از این نرم‌افزارها استفاده کنند. در بخش بعد دو نرم‌افزار متن باز که این سرویس را ارائه می‌دهند توضیح خواهیم داد.نرم‌افزارهای متن باز یکی از نرم‌افزارهای معروف ارائه‌ی سرویس SSO، برنامه‌ی Identity Server است. این برنامه یک چارچوب cross-platform براساس OpenID Connect و OAuth2 است و یک احراز هویت مرکزی و قابلیت شناسایی برای برنامه چندتایی می‌دهد. OAuth2 یک پروتکل استاندارد صنعتی برای احراز هویت است و OpenID Connectنیز یک لایه‌ی ساده برروی این پروتکل می‌باشد که به مشتریان اجازه می‌دهد تا هویت کاربرنهایی را براساس احرازهویت انجام شده توسط یک سرور احراز هویت رسیدگی کند. این نرم‌افزار به زبان C# نوشته شده و کد منبع آن در github به همراه مستندات مربوط به استقرار و توسعه قابل مشاهده است.نرم‌افزار KeyCloakنیز یک نرم‌افزار متن باز است که این نرم‌افزار نیز براساس OpenID Connect، Auth2.0و SAML2.0 است. SAML2.0 مخفف Security Assertion Markup Language است و یک پروتکل براساس XML است که از توکن‌های امنیتی شامل اعلان‌هایی برای ارسال اطلاعات درمورد یک کاربر نهایی بین یک ارائه دهنده‌ی هویت و یک ارائه‌ دهنده‌ی سرویس است. این برنامه قابلیت‌های سرویس SSO را برای برنامه و سرویس‌های تحت وب ارائه می‌دهد و قابلیت یکپارچه سازی LDAPو active directory را می‌دهد. درواقع یک واسط کاربری دارد که کاربران می‌توانند جلسه‌ها، اجازه‌ها و نقش‌ها را مدیریت کنند. همچنین کتابخانه‌های مشتری برای زبان‌های رایج مانند Java، JavaScript و C# ارائه می‌هد. این برنامه به زبان Javaنوشته شده است و کد منبع آن نیز در github قرار دارد.البته شرکت‌های نرم‌افزاری هم هستند که این سرویس را ارائه می‌دهند و سازمان‌های کوچک و متوسط امکان استفاده از سرویسی که ارائه می ٔهند را دارند که در ادامه به معرفی دو مورد از این ارائه دهندگان در داخل کشور می‌پردازیمارائه دهندگان سرویس SSOدر ایران یکی از شرکت‌هایی که سرویس SSO را ارائه می‌دهد، می‌توان از شرکت فناوران هویت الکترونیکی امن(هویتا) را نام برد. این شرکت یک سامانه به نام ParsSSOایجاد کرده است که یک سرویس احراز هویت و امضای دیجیتال مبتنی بر PKI است. PKIمخفف Public Key Infrastructure است و یک سیستم از فرایندها، سیاست‌ها، احراز هویت و تکنولوژی‌هایی که رمزگذاری را کنترل می‌کنند و درواقع چیزی است که از پیام‌ها متنی، ایمیل، رمزهای عبور و غیره حفاظت می‌کند. این سامانه از دو زیر سیستم به نام ارائه‌ دهنده‌ی هویت و دروازه‌ی امضای دیجیتال استفاده می‌کند. سیستم ارائه دهنده‌ی هویت برای ارائه خدمات AAAشامل احراز هویت(Authentication)، کنترل دسترسی(Authorization) و حسابرسی(Accounting) است. سیستم دروازه‌ی امضای دیجیتال نیز برای ارائه‌ی خدمات درگاه دیجیتال است. از ویژگی‌های این سیستم می‌توان به موارد زیر اشاره کرد:پشتیبانی از الگوریتم ‌های نامتقارن امضای دیجیتال متعارفپشتیبانی از فرمت ‌های امضای دیجیتال متعارف شامل RAW, PKCS#1, PKCS#7, PAdeS, XAdeS, CAdeSپشتیبانی از الگوریتم های HASH شامل MD5, SHA-1, SHA-2احراز هویت بر اساس چارچوب OAuth2.0 و به صورت Single Sign-Onمدیریت یکپارچه کاربران، نقش ‌ها، سازمان ‌ها، فراهم کنندگان خدمت و نشست‌ هاپشتیبانی از انواع احراز هویت شامل نام کاربری و رمز عبور، توکن امضای دیجیتال سخت افزاری پارس کی، سرویس امضای همراه و OTPشرکت دیگری که در ایران این سرویس را ارائه می‌دهد شرکت متن باز سامانه است که نام این سیستم را متین گذاشته‌اند. سرویسی که توسط این شرکت پیاده سازی شده است امکاناتی مانند پیاده‌سازی به صورت توزیع شده، احراز هویت دو عاملی، ایجاد یکپارچگی در مراکز داده مختلف، اتصال به پایگاه داده کاربران و اتصال به سایر ارائه دهندگان سرویس SSo را فراهم می‌کند. با مراجعه به سایت این شرکت مستنداتی قرار داده شده است که ویژگی‌های و پروتکل‌های استفاده شده در این سرویس را به صورت کامل توضیح داده‌اندجمع بندیبا سامانه‌ی احراز هویت متمرکز دیگر نیازی به وارد شدن به حساب کاربری برای چند برنامه‌ی یکپارچه نیست. مانند برنامه‌هایی که توسط شرکت گوگل ارائه می‌شوند. شما با ورود به حساب کاربری خود در یکی از برنامه‌ها مانند آن است که در سایر برنامه‌ها نیز وارد حساب کاربری خود شده‌اید. این سیستم مزیت‌هایی مانند صرفه جویی در وقت برای بازیابی رمز عبور، تعیین تنها یک رمز قوی برای حساب خود و عدم فراموشی آن، امکان مدیریت بهتر و امن‌تر رمز‌های عبور و امکان اجرای بهتری سیاست‌گذاری‌های رمزعبور. این سرویس به صورت متن باز نیز ارائه می‌شود و نرم‌افزارهایی مانند Identity Serverو KeyCloak وجود دارند که کدهای آن‌ها حتی در گیت‌هاب موجود است و توسعه‌ دهندگان نرم‌افزار سازمان‌ها ‌می‌توانند از آن‌ها استفاده کنند. همچنین در ایران نیز شرکت‌هایی مانند متن باز سامانه و هویتا هستند که این سرویس را در اختیار سازمان‌ها قرار می‌دهندمراجعhttps://www.cloudflare.com/learning/access-management/what-is-sso/https://www.techtarget.com/searchsecurity/definition/single-sign-onhttps://blog.containerize.com/2021/01/29/top-5-open-source-single-sign-on-software-in-the-year-2021/https://mbs.co.ir/fa/content/Single-Sign-Onhttps://www.hovita.ir/portal/viewpage/2/%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-%D9%85%D8%AA%D9%85%D8%B1%DA%A9%D8%B2-sso-%D8%AA%D8%AC%D9%87%DB%8C%D8%B2-%D8%B4%D8%AF%D9%87-%D8%A8%D9%87-%D8%AF%D8%B1%DA%AF%D8%A7%D9%87-%D8%A7%D9%85%D8%B6%D8%A7%DB%8C-%D8%AF%DB%8C%D8%AC%DB%8C%D8%AA%D8%A7%D9%84-pars-sso/این مطلب، بخشی از تمرین‌های درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است