وقتی در برنامه های کاربردی صحبت از امنیت می شود، موضوع صحبت، بخشی از نیازهای کارکردی(Functional) و بخشی دیگر از نیازهای غیر کارکردی است که شامل دو مقوله مهم Authentication و Authorization است.
{ Security } = { Authentication } + { Authorization }
Authentication مشخص می کند که شمای کاربر چه کسی هستید؟ و Authorization که همیشه بعد از Authentication و در صورت تأیید هویت کاربر انجام می شود، مشخص می کند که شما اجازه انجام چه کاری را دارید و اجازه انجام چه کاری را ندارید.
موضوع بحث ما مقوله دوم یعنی Authorization است و هدف معرفی سیستم های موجود، جهت الگوبرداری یا استفاده است.
Authorization Manager(AzMan)
Authorization Manager یا همان AzMan یک سیستم کنترل دسترسی Role-Base در محیط ویندوز است.
مدیریت این سیستم از طریق MMC یا همان Microsoft Management Console در محیط ویندوز انجام می شود.برای دسترسی به این ابزار(در صورتی که بر روی سیستم عامل نصب شده باشد) کافیست دستور azman.msc را در محیط Command Prompt اجرا کنید.
این ابزار امکان تعریف Operation و دسته بندی این Operation ها را در Task ها فراهم می کند.دسترسی نقش ها به این Operation ها و Task ها، تعریف و مدیریت کاربران و نقش ها و تخصیص کاربران به این نقش ها به راحتی در این ابزار قابل انجام است.
در AzMan می توان محل ذخیره سازی را بر حسب کاربرد در XML File یا Active Directory انتخاب کرد.
برقراری ارتباط در برنامه کاربردی به این سیستم به سادگی قابل انجام است.
اولین امکانی که در دات نت می توان به آن اشاره کرد، کلاس RoleManagerAzManProvider است.برای استفاده از این کلاس کافیست در تگ <roleManager> در Web.Config کلاس فوق را به عنوان defaultProvider مشخص کنیم.با این کار تمامی API مربوط به Roles از AzMan استفاده خواهند کرد.
برای چک کردن دسترسی ها در برنامه کاربردی که مهمترین دغدغه است بایستی از AzMan API که یک کتابخانه COM است استفاده کنیم.در این کتابخانه متدی با نام AccessCheck در اینترفیس IAzClientContext وجود دارد که دسترسی یا عدم دسترسی کاربر را به Task یا Operation خاصی را مشخص می کند.
نکته ی قابل ذکر این که در Enterprise Library در Security Application Block روی Authorization هم کار شده که یکی از پیاده سازی های آن روی AzMan بوده است.توصیه من اینست که اگر قرار است از AzMan استفاده کنید، به جای این که مستقیماً از AzMan COM API استفاده کنید، از Security Application Block استفاده کنید.
.NET SQL Authorization Manager (NetSQLAzMan)
NetSQLAzMan پروژه ای است Open Source با مدلی شبیه به مدل AzMan با تفاوت ها و قابلیت هایی از قبیل:
- برخلاف AzMan(که COM است)، کتابخانه آن دات نت است.
- محل ذخیره سازی آن SQL Server است.
- برای Administration آن مانند AzMan می توان از کنسول MMC 3.0 استفاده کرد، اما علاوه بر این امکان، با کنسول وب بیس دیگری نیز که برای آن طراحی شده است، این کار قابل انجام است.
- در AzMan در Operationها، نمی توان Hierarchy داشت، اما در این ابزار چنین محدودیتی وجود ندارد.
- در AzMan دسترسی فقط دارای دو حالت است(Allow یا Deny) اما در این ابزار چهار حالت وجود دارد:اول) Allow with delegation دوم) Allow سوم) Deny چهارم) Neutral.
- AzMan از اعمال Authorization در بازه زمانی خاص پشتیبانی نمی کند، اما در این ابزار چنین نیست.
- و خیلی قابلیت های دیگر …
مطالب گفته شده، خلاصه ای از نتایجی بود که با همراهی و همکاری دوست خوبم علی نوبر بدست آورده بودیم.
بحث Access Control را قبل از این هم با پویا مطرح کرده بودیم، آخرین صحبتی که با هم داشتیم خاطرم هست که قصد داشت چنین سیستمی را طراحی کند ولی از نتیجه اش خبری ندارم.
به هر حال این پست و کامنت های دوستان می تواند باب خوبی را در جهت شناخت این سیستم ها برایمان باز کند.