معرفی OAuth



معرفی پروتکل OAuth

   کلمه OAuth مخفف عبارت Open Authorization یک پروتکل استاندارد است که بر اساس آن، اطلاعات هر کاربر بدون دادن رمز عبور، به صورت محدود در اختیار برنامه‌های کاربردی دیگر قرار می‌گیرد. پروتکل OAuth، به برنامه‌های کاربردی این امکان را می‌دهد تا بدون آن که کاربران را ملزم به افشای اطلاعات محرمانه خود (مانند پسورد) کند، از طریق API به منابع حفاظت شده از یک سرویس وب دسترسی پیدا کنند. در حقیقت، وقتی OAuth روی یک برنامه کاربردی (برای مثال روی سرویس Gmail) فعال باشد، یک API فراهم می‌کند که برنامه‌های کاربردی دیگر می‌توانند از طریق آن API، به داده‌های شما دسترسی محدود داشته باشند. این مکانیزم توسط شرکت‌هایی مانندAmazon ، Google ، Facebook ، Microsoft  و Twitter  استفاده می‌شود تا به کاربران اجازه دهد اطلاعات مربوط به حساب‌های خود را با برنامه‌های شخص ثالث (third party) به اشتراک بگذارند و در آن‌ها استفاده کنند .

   برای مثال شما یک حساب کاربری روی Gmail دارید و می‌خواهید در Linkedin هم یک اکانت ایجاد کرده و تمامی اطلاعات تماس خود را در آن‌جا نیز داشته باشید. یک راه این است که شما تمامی دوستان و کسانی که با آن‌ها در تماس هستید را مجدد به Linkedin  اضافه کنید و یک راه دیگر استفاده از OAuth  است به این صورت که با یک مجوز، Linkedin تمامی دوستان شما را از Gmail دریافت کند.

1- OAuth2.0


   پروتکل OAuth دارای دو نسخه اصلی OAuth 1.0 و OAuth 2.0 می‌باشد که هر کدام نیاز‌های مختلفی را برآورده می‌کند. صحبت در مورد این دو نسخه، تاریخچه و مقایسه آن‌ها را در بخش انتهایی این دوره انجام خواهیم داد اما هدف اصلی ما بررسی پروتکل OAuth 2.0 می‌باشد و در ادامه این دوره به آن خواهیم پرداخت. هر جا که نسخه ذکر نشده است، منظور همان OAuth 2.0 می‌باشد.

 

عملکرد OAuth 2.0 به زبان ساده  


   در این بخش می‌خواهیم یک دید کلی و ساده از نحوه عملکرد و مراحل کار پروتکل OAuth 2.0 را بیان کنیم شکل زیر یک نمای ساده از ساختار این پروتکل را نشان می‌دهد. این تصویر نشان دهنده 3 موجودیت می‌باشد:

·    کاربر (User)

·    برنامه اصلی که کاربر در آن ثبت‌نام کرده (Authorization Server) مانند google

·    برنامه فرعی که کاربر در آن حساب کاربری ندارد و دسترسی به اطلاعات کاربر را نیاز دارد. (Client)

   اگر دقت کنیم مشخص است که همه اجزا یا موجودیت‌ها با هم ارتباط دارند نه این که یکی بین دیگری قرار داشته باشد.

 

 

   بر اساس شکل بالا خواهیم داشت:

.  برنامه کاربردی درخواست استفاده از اطلاعات کاربر را به برنامه‌ای که کاربر در آن جا اکانت دارد، ارسال می‌کند.
.  برنامه‌ای که کاربر در آن جا اکانت دارد، درخواست را دریافت کرده و به کاربر اطلاع می‌دهد و موافقت آن را می‌خواهد.
.  اگر کاربر با درخواست برنامه موافقت کند، مجوز استفاده از اطلاعات را به آن می‌دهد.
.  برنامه کاربردی بعد از دریافت مجوز از کاربر، یک توکن از سرور تشخیص هویت که کاربر در آن جا اکانت دارد، دریافت می‌کند و در این مرحله تشخیص هویت کاربر کامل می‌شود.
.  برنامه کاربردی با استفاده از این توکن از سرور منابع (مکانی که اطلاعات کاربر در آن جا قرار دارد)، تقاضای اطلاعات می‌کند.
 

2- اجزای پروتکل OAuth 2.0


   در OAuth 2.0 چهار نقش تعریف شده است:

1.   Resource owner

2.   Resource server

3.   Authorization server

4.   Client

   در ادامه علاوه بر معرفی این 4 نقش، می‌خواهیم کمی وارد جزئیات شده و اجزای دیگری که ممکن است در روند کار از آن‌ها نام ببریم را نیز شرح دهیم.

  Resource Owner

   کاربری است که اطلاعاتی در اختیار دارد و برنامه‌های کاربردی برای دسترسی به آن اطلاعات نیاز به مجوز از سمت آن کاربر دارند. 

  Resource

   در واقع همان اطلاعاتی می‌باشد که قرار است با اجازه کاربر، در اختیار برنامه کاربردی قرار گیرد. منابع می‌تواند شامل داده‌ها مانند (نام، تصاویر، اطلاعات تماس‌ها، اسناد) و خدمات (مانند ارسال یک مطلب در وبلاگ، انتقال وجه) یا هر منبع دیگری باشند که دارای محدودیت دسترسی است.  

  Resource Server

   سرور منبع یک اصطلاح در OAuth 2.0 برای سرور API می‌باشد. سروری که میزبانی منابع محافظت شده را بر عهده دارد و قادر به پذیرش و پاسخگویی به درخواست منابع محافظت شده با استفاده از Access Tokenها می‌باشد.

   سرور منبع پس از به دست آوردن Access Token، درخواست‌های معتبر را مدیریت می‌کند. در مقیاس بزرگ ممکن است بیش از یک سرور منبع وجود داشته باشد. برای مثالGoogle  دارای ده ها سرور منبع مانند پلتفرمGoogle Cloud ، Google Maps ، Google Drive ، Youtube ، Google+  و بسیاری دیگر است که هرکدام از این سرورهای منبع کاملا مجزا هستند، اما همه آن‌ها یک مجموهه سرور مجوز یکسان دارند.

  Authorization Server

   سرور یا همان برنامه‌ای است که بعد از تایید resource owner یا همان کاربر و اخذ مجوز از او، access token را برای کلاینت صادر می‌کند. این سرور وظیفه تشخیص هویت برنامه‌های کاربردی و صدور شناسه یا Token برای آن‌ها، جهت استفاده از اطلاعات کاربر را بر عهده دارد. نا گفته نماند که گاهی ممکن است Resource Server و Authorization Server یکی باشند.

 

  Authorization Grant

   این عبارت به معنی اعطا کردن مجوز بوده و در اصل همان مجوزی است که Authorization Server صادر می‌کند.

  Client

   برنامه‌ای کاربردی است که درخواست دسترسی و استفاده از اطلاعات کاربر را دارد. در حقیقت کلاینت، برنامه‌ای است که می‌خواهد از طرف کاربر عمل کرده یا این که به منابع کاربر دسترسی پیدا کند. کلاینت قبل از دسترسی به حساب کاربر، باید مجوز کسب کند که از 2 روش این کار انجام می‌شود:

1.  با هدایت کاربر به authorization server، مجوز را دریافت می‌کند.

2.  با ارتباط مستقیم با authorization server و بدون تعامل با کاربر، مجوز را دریافت می‌کند.

 

   در OAuth دو نوع Client بر اساس شرایط مختلف و قابلیت‌ها تعریف شده است. این قابلیت‌ها برای تعیین امنیت احراز هویت در Authorization Server، می‌باشد.

·   Confidential Client: کلاینت‌هایی که قادر به حفظ محرمانه بودن خود هستند (به عنوان مثال کلاینت پیاده سازی شده روی یک سرور امن با دسترسی محدود) یا قادر به احراز هویت کلاینت به صورت امن با استفاده از روش های دیگر هستند.

·   Public Client: کلاینت‌هایی که نتوانند محرمانه بودن خود را حفظ کنند (به عنوان مثال، کلاینت‌هایی که در دستگاه مورد استفاده توسط صاحب منبع نصب شده یا برنامه‌هایی که مبتنی بر مرورگر وب اجرا می‌شوند) و قادر به احراز هویت کلاینت به صورت ایمن نیستند.

 

 

   اگر بخواهیم نحوه ارتباط اجزای معرفی شده را به زبان ساده بیان کنیم، شکل زیر این کار را برای ما انجام خواهد داد.  

 

 

   بر اساس اجزایی که معرفی شد، ساختار پروتکل OAuth 2.0 و دیاگرام روند اجرای آن را در شکل زیر نمایش می‌دهیم.  

 

 

 

جمع‌بندی

تا این قسمت از دوره OAuth2.0-Passport با مفاهیم احراز هویت و OAuth و سپس در این بخش با نحوه ی عملکرد این استاندارد به زبان ساده آشنا شدید. در ادامه ی این دوره با ما همراه باشید تا کمی عمیق تر به این موضوع بپردازیم و انواع روش های احراز هویت توسط OAuth را یاد بگیرید.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان