امنیت, یکی از دغدغه های سیستم های نرم افزاری و به خصوص سیستم های بانکی است و همه ساله انواع مختلفی از مکانیزم های امنیتی و تشخیص هویت برای امن تر کردن این سیستم ها پیشنهاد می شود.
در سوی دیگر کاربر استفاده کننده از سیستم ها قرار دارد که یکی از نیاز مندی های اساسی وی امنیت است که با وجود این مشخصه مهم است که کاربری تصمیم به استفاده سیستم خاصی میگیرد , ولی یکی دیگر دغدغه های کاربران سادگی استفاده از برنامه های کاربردی است به عنوان مثال یک کاربر ممکن است در چندین سایت بانکی , شبکه های اجتماعی و سایت های دیگر عضو باشد و برای دسترسی به داده ها در هر کدام از این برنامه های کاربردی نیاز است که نام کاربری و کلمه عبور و اطلاعات تکمیلی کاربر مثل اطلاعات تماس و … وارد شود , که این موضوع با توجه به تعدد این برنامه ها مطلوب کاربر نیست.
ولی راه حل چیست؟
قبل از ورود به راه حل فنی این سناریو را در نظر بگیرید , دارندگان ماشین های گرانقیمت و لوکس معمولا در پارکینگ ها و هتل ها مسئولیت پارک ماشین را به عهده کارگران ان ها می گذارند ولی این موضوع ریسک بزرگی است که ماشین های گرانقیمت را با کلید ماشین در اختیار اشخاص دیگر قرار داد , برای کمتر کردن این ریسک سازندگان این نوع ماشین ها معمولا علاوه بر کلید اصلی ماشین یک کلید با دسترسی محدود هم به خریدار ارائه می دهند که با استفاده از ان می توان خودرو را تا مسافت محدودی هدایت کرد . در حقیقت شما یک دسترسی محدود روی ماشین به یک شخص خاص داده اید بدون ان که دسترسی کامل به او بدهید و یک کلید اصلی هم خودتان دارید تا در صورت لزوم همه دسترسی ها را داشته باشید .
ایده اصلی oauth نیز بر همین مبناست oauth ,کاربران را قادر می سازد دسترسی خیلی محدودی روی داده های خود به برخی از برنامه های کاربردی و سایت ها می دهد و بقیه برنامه های کاربردی با یک کلید خاصی که از کاربر می گیرند می توانند از اطلاعات کاربران در این سایت ها استفاده کنند .
به عنوان یک نمونه در نظر بگیرید شما یک شناسه کاربری روی Gmail دارید و قصد عضو شدن در linkedin را هم دارید یک راه این است که شما تمامی دوستان و کسانی را که با آن ها در تماس هستید را مجدد به linkedin هم اضافه کنید و یک راه دیگر استفاده از oauth است به این صورت که با یک مجوز linkedin تمامی دوستان شما را از gmail دریافت کند.
در حقیقت وقتی oauth روی gmail فعال باشد یک API ارائه می دهد که برنامه های کاربردی دیگر می توانند با ان داده های شما دسترسی محدود داشته باشند .
Oauth به عنوان یک پروتکل تشخیص هویت متنباز بستری را فراهم می اورد که اطلاعات هر فرد با استفاده از یک service provider و یک API به صورت محدود در اختیار برنامه های کاربردی دیگر قرار گیرد .
اجزای پروتکل oauth :
این پروتکل هم مانند بقیه پروتکل ها دارای اجزای تشکیل دهنده است که توضیح مختصری از انها ارائه شده است :
۱- resource owner
کاربر صاحب اطلاعات است که برنامه های کاربردی را قادر می سازد به اطلاعات وی دسترسی داشته باشند
۲-Client
برنامه کاربردی است که درخواست استفاده از اطلاعات کاربر را دارد
۳- resource server
سروری هست که اطلاعات کاربر را نگهداری می کند
۴- authorization server
وظیفه تشخصیص هویت برنامه های کاربردی و صدور شناسه(توکن) برای انها جهت استفاده انها از اطلاعات کاربر را بر عهده دارد.
مراحل پروتکل :
- برنامه کاربردی تقاضای استفاده از اطلاعات کاربر را صادر می کند
- اگر کاربر دارنده اطلاعات با تقاضای کاربر موافقت کند مجوز استفاده از اطلاعات را به کاربر می دهد.
- برنامه کاربردی بعد از دریافت مجوز از کاربر یک توکن از سرور تشخیص هویت دریافت می کند و در این مرحله تشخیص هویت کاربر کامل می شود.
- برنامه کاربردی با استفاده از این توکن از سرور منابع(resource server ) تقاضای اطلاعات می کند