احتمالا تاکنون برای شما پیش آمده است که وارد یک برنامهای شوید و برای استفاده از امکانات آن نیاز به ورود به حساب کاربری داشته باشد. شرکتی که این برنامه را توسعه داده است ممکن است که برنامههای دیگری نیز توسعه داده باشد که برای استفاده از آنها نیاز است تا شما وارد حساب خود شوید. برای آنکه منظور خود را بهتر بیان کنم سایت Firebaseکه توسط شرکت گوگل توسعه داده شده است را مثال میزنم. برای آنکه از امکانات Firebase استفاده کنید لازم است تا ابتدا وارد حساب کاربری خود شوید. همچنین ممکن است همزمان بخواهید از امکانات موجود در Google Cloud نیز استفاده کنید و در آنجا نیز برای استفاده از امکانات آن باید وارد حساب خود شده باشید. نکته در این جا است، هنگامی که شما در یکی از این دو برنامه، (Google Could یا Firebase) وارد حساب خود شوید، دیگر نیاز نیست که اطلاعات ورود یعنی نام کاربری و رمز عبور خود را در دیگری وارد کنید و به طور خودکار شما با وارد کردن تنها یک بار نام کاربری و رمز عبور در یکی از برنامهها در برنامهی دیگر نیز وارد حساب کاربری خود شدهاید. به این ویژگی، احراز هویت متمرکز (Single Sign Onیا به اختصار SSO) میگویند. SSOدرواقع یک تکنولوژی است که صفحات ورود برنامههای مختلف را به یک صفحه تبدیل میکند. SSO این امکان را فراهم میکند تا کاربر تنها یک بار نام کاربری و رمز عبور خود را در یک صفحه وارد کند تا به تمام برنامههایی که به گونهای با هم یکپارچه هستند دسترسی داشته باشد. 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 را ارائه میدهد، میتوان از شرکت فناوران هویت الکترونیکی امن(هویتا) را نام برد. این شرکت یک سامانه به نام ParsSSOایجاد کرده است که یک سرویس احراز هویت و امضای دیجیتال مبتنی بر PKI است. PKIمخفف Public Key Infrastructure است و یک سیستم از فرایندها، سیاستها، احراز هویت و تکنولوژیهایی که رمزگذاری را کنترل میکنند و درواقع چیزی است که از پیامها متنی، ایمیل، رمزهای عبور و غیره حفاظت میکند. این سامانه از دو زیر سیستم به نام ارائه دهندهی هویت و دروازهی امضای دیجیتال استفاده میکند. سیستم ارائه دهندهی هویت برای ارائه خدمات AAAشامل احراز هویت(Authentication)، کنترل دسترسی(Authorization) و حسابرسی(Accounting) است. سیستم دروازهی امضای دیجیتال نیز برای ارائهی خدمات درگاه دیجیتال است. از ویژگیهای این سیستم میتوان به موارد زیر اشاره کرد:
شرکت دیگری که در ایران این سرویس را ارائه میدهد شرکت متن باز سامانه است که نام این سیستم را متین گذاشتهاند. سرویسی که توسط این شرکت پیاده سازی شده است امکاناتی مانند پیادهسازی به صورت توزیع شده، احراز هویت دو عاملی، ایجاد یکپارچگی در مراکز داده مختلف، اتصال به پایگاه داده کاربران و اتصال به سایر ارائه دهندگان سرویس SSo را فراهم میکند. با مراجعه به سایت این شرکت مستنداتی قرار داده شده است که ویژگیهای و پروتکلهای استفاده شده در این سرویس را به صورت کامل توضیح دادهاند
با سامانهی احراز هویت متمرکز دیگر نیازی به وارد شدن به حساب کاربری برای چند برنامهی یکپارچه نیست. مانند برنامههایی که توسط شرکت گوگل ارائه میشوند. شما با ورود به حساب کاربری خود در یکی از برنامهها مانند آن است که در سایر برنامهها نیز وارد حساب کاربری خود شدهاید. این سیستم مزیتهایی مانند صرفه جویی در وقت برای بازیابی رمز عبور، تعیین تنها یک رمز قوی برای حساب خود و عدم فراموشی آن، امکان مدیریت بهتر و امنتر رمزهای عبور و امکان اجرای بهتری سیاستگذاریهای رمزعبور. این سرویس به صورت متن باز نیز ارائه میشود و نرمافزارهایی مانند Identity Serverو KeyCloak وجود دارند که کدهای آنها حتی در گیتهاب موجود است و توسعه دهندگان نرمافزار سازمانها میتوانند از آنها استفاده کنند. همچنین در ایران نیز شرکتهایی مانند متن باز سامانه و هویتا هستند که این سرویس را در اختیار سازمانها قرار میدهند
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است