OAuth چیست و چگونه کار میکند؟
دنیای دیجیتال و اپلیکیشنها تمام تلاش خود را میکنند تا با ارائه خدمات گوناگون زندگی ما را ساده و آسان کنند. لاگین کردن در تعداد زیادی اپلیکیشن یکی از این زمینههاست که دنیای وب به کمک آمده و پروتکلهایی برای آن وضع کرده است تا مجبور نباشیم که نام کاربری و پسورد را در همه اپلیکیشنهایی که هر روز استفاده میکنیم، وارد کنیم و درعینحال امنیت اطلاعات ما هم حفظ شود.
در این مقاله، ما شما را به یکی از این پروتکلها به نام OAuth معرفی میکنیم و جزییات عملکرد آن را نشان میدهیم.
در مورد ارائه پسوردهای خود به دیگران زیاد صحبت شده است و میدانید که هرگز نباید این کار را انجام دهید! هنگامیکه یک وبسایت میخواهد از خدمات وبسایت دیگری استفاده کند مانند زمانی که Bitly در Twitter شما یک لینک کوتاه شده پست میکند، بهجای اینکه درخواست کند که پسورد را به اشتراک بگذارید، باید از یک پروتکل به نام OAuth استفاده کند.
از نظر امنیتی مهم است که درک کنید که چگونه یک برنامه، وبسایت یا اپ، شما را بهعنوان یک کاربر تایید میکند: آیا آنها مجوزهای لازم را دارند؟ آیا به طریقی به آنها اجازه دادهاید تا هویت را تایید کنند و به دیتای شما از طرف شما دسترسی پیدا کنند؟ پروتکل OAuth کمک میکند تا این روند ساده شود؛ اما با وجود اتوماسیون هم آگاه باشید که چگونه یک شخص یا شرکت داده را استفاده یا ذخیره میکند!
OAuth چیست ؟
OAuth یک پروتکل یا فریمورک مجوز دهی استاندارد باز است که به اپلیکیشنها این توانایی را میدهد تا دسترسی اختصاصی امن داشته باشند. برای مثال، میتوانید به فیسبوک بگویید که ESPN.com میتواند به پروفایل یا پستهای تایم لاین دسترسی داشته باشد بدون اینکه مجبور باشید به ESPN پسورد فیسبوک خود را بدهید. این عمل ریسک امنیتی را بهصورت چشمگیری به حداقل میرساند: اگر ESPN دچار حملههای سایبری شود، پسورد فیسبوک امن باقی میماند.
OAuth داده پسورد را به اشتراک نمیگذارد بلکه در عوض از نشانهای مجوز دهی استفاده میکند تا یک هویت را بین مصرفکنندگان و ارائهدهندگان خدمات تایید کند. OAuth یک پروتکل مجوز دهی است که به شما امکان میدهد تا تایید کنید که یک اپلیکیشن بهجای شما با یک اپلیکیشن دیگر تعامل داشته باشد بدون اینکه پسورد را رونمایی کند.
مقایسه SAML و OAuth
SAML که مخفف Security Assertion Markup Language است یک استاندارد احراز هویت جایگزین است که بسیاری از شرکتها برای لاگین یک باره یا SSO استفاده میکنند. سمِل به شرکتها اجازه میدهد تا بر اینکه چه کسانی به منابع شرکت دسترسی دارند، نظارت کنند.
تفاوتهای زیادی بین SAML و OAuth وجود دارد. SAML از XML استفاده میکند تا پیامها را منتقل کند درحالیکه OAuth از JSON استفاده میکند. OAuth تجربه کاربری موبایل سادهتری ارائه میدهد درحالیکه سمل بیشتر تمایل به امنیت شرکتی دارد. این آخرین نکته یک نقطه تمایز مهم است: OAuth از API بهصورت گسترده استفاده میکند برای همین است که اپلیکیشنهای موبایل، اپلیکیشنهای مدرن وب، کنسولهای بازی و دستگاههای اینترنت اشیا OAuth را تجربه بهتری برای کاربر در نظر میگیرند. در طرف مقابل سمل یک کوکی در مرورگر قرار میدهد که به کاربر اجازه میدهد تا به صفحات وب خاصی دسترسی پیدا کند که برای کارهای کوچک مناسب است اما اگر مجبورید که هر روز وارد ترموستات خود شوید، اصلاً گزینه خوبی نیست.
نمونههای OAuth
سادهترین مثال OAuth در حین عملکرد وقتی است که یک وبسایت میگوید: «آیا تمایل دارید که با لاگین وبسایت دیگر وارد وبسایت ما شوید؟» در این سناریو، تنها چیزی که وبسایت اول (که به آن مصرفکننده میگوییم) میخواهد این است که بداند کاربر در هر دو وبسایت یکسان است و بهصورت موفقیتآمیزی وارد سایت ارائهدهنده خدمات شده است که همان سایتی است که کاربر ابتدا در آن لاگین کرده است.
اپهای فیسبوک نمونههای خوبی برای استفاده از OAuth هستند. فرض کنید که در حال استفاده از یک اپ در فیسبوک هستید و سوال میکند تا پروفایل و عکسهای خود را به اشتراک بگذارید. فیسبوک در این مثال ارائهدهنده خدمات است که عکسها و دادهها را دارد. اپ هم مصرفکننده است و شما بهعنوان یک کاربر قصد دارید که از اپ استفاده کنید تا بر روی عکسهای خود کاری انجام دهید. شما اختصاصاً دسترسی به عکسها را به این اپ میدهید که OAuth در پسزمینه این کار را مدیریت میکند.
دستگاههای هوشمند خانه مانند توستر، ترموستات، سیستم امنیتی و غیره احتمالاً از نوعی از اطلاعات ورود استفاده میکنند تا با همدیگر سینک شوند و به شما اجازه میدهند تا آنها را از یک مرورگر یا دستگاه، مدیریت کنید. این دستگاهها از چیزی که OAuth آن را مجوز محرمانه مینامد، استفاده میکنند که به این معنی است که آنها اطلاعات مهم خصوصی را نگه میدارند تا مجبور نباشید که بارها و بارها اطلاعات ورود خود را تایپ کنید.
تشریح عملکرد OAuth
OAuth در مورد مجوز دهی است و نه در مورد احراز هویت! مجوز دادن یعنی درخواست اجازه برای انجام کاری درحالیکه احراز هویت در مورد اثبات هویت است فقط به این دلیل که شما اطلاعات لازم را میدانید. OAuth دادههای احراز هویت را بین مصرفکننده و ارائهدهنده خدمات ردوبدل نمیکند اما در عوض بهعنوان نوعی نشان مجوز دهی عمل میکند.
متداولترین مثال برای OAuth، سوئیچی است که به نگهبان برای پارک کردن ماشین داده می شود. این سوئیچ، به نگهبان اجازه میدهد که ماشین را روشن و حرکت کند؛ اما اجازه دسترسی به صندوقعقب یا داشبورد را نمیدهد. OAuth هم مانند کلید نگهبان است. بهعنوان یک کاربر میتوانید به مصرفکنندگان بگویید که از هر ارائهدهنده خدمات، چه اطلاعاتی را بگیرند و از چه دادهای استفاده نکنند. حتی میتوانید به هر مصرفکننده یک سوئیچ نگهبان جداگانه بدهید. در این صورت، آنها هرگز کلید اصلی را نخواهند داشت یا به هر نوع داده خصوصی که کلید اصلی را به آنها میدهد، دسترسی ندارند.
OAuth چگونه کار میکند؟
در یک نقلوانتقال OAuth سه بازیگر اصلی وجود دارند: کاربر، مصرفکننده و ارائهدهنده خدمات. این گروه ۳ نفرِ به مثلث عشق OAuth معروف است!
در سناریوی زیر، آریا کاربر است، bitly (سرویس کوتاه کننده لینک) مصرفکننده و وبسایت توییتر ارائهدهنده خدمات است که امنیت منابع آریا (توییتها) را کنترل میکند. آریا میخواهد که bitly قادر باشد تا لینکهای کوتاه شده را بهحساب توییتر او پست کند. این روند بهصورت زیر اتفاق میافتد:
قدم ۱: کاربر نیت خود را نشان میدهد.
- آریا (کاربر): من میخواهم که لینکهای کوتاه شده را مستقیماً بهحساب توییتر خودم پست کنم.
- بیتلی (مصرفکننده): عالیه! باید اجازه بگیرم.
قدم ۲: مصرفکننده اجازه میگیرد.
- بیتلی: یک کاربر میخواهد من بهحساب توییتر او لینک پست کنم. آیا میتوانم یک توکن(نشان) داشته باشم؟
- توییتر (ارائهدهنده خدمات): حتماً. این هم یک توکن و کلید.
کلید به این دلیل استفاده میشود تا از درخواستهای جعلی جلوگیری شود. مصرفکننده از کلید استفاده میکند تا هر درخواست را امضا کند تا ارائهدهنده خدمات بتواند درخواست را تایید کند و مطمئن شود که واقعاً از طرف اپلیکیشن مصرفکننده صادر شده است.
قدم ۳: کاربر به ارائهدهنده خدمات ریدایرکت میشود.
- bitly: آریا باید به توییتر برگردید تا بتوانید تایید کنید. این نشان را هم با خود ببرید.
- آریا: اوکی
<بیتلی آریا را برای مجوز دهی به توییتر دایرکت میکند>
این قدم، قسمت ترسناک این روند است. اگر بیتلی شرکت کلاهبرداری بود، میتوانست یک پنجره پاپآپ باز کند که شبیه توییتر است؛ اما در واقع قصد دزدیدن نام کاربری و پسورد آریا را دارد. همیشه اطمینان حاصل کنید که URL که به آن ریدایرکت شدهاید در واقع ارائهدهنده خدمات (در این سناریو توییتر) است.
قدم ۴: کاربر اجازه را صادر میکند.
- آریا: توییتر، من میخواهم که برای این نشان درخواست(توکن) که سرویس bitly به من داده است، مجوز صادر کنم.
- توییتر: فقط برای اینکه مطمئن شویم: شما میخواهید که به bitly اجازه دهید که کار x و y و z را با حساب توییتر شما انجام دهد؟
- آریا: بله
- توییتر: اوکی، میتوانید به بیتلی برگردید و به آنها بگوئید که اجازه دارند تا از نشان درخواست استفاده کنند. توییتر درخواست را بهعنوان یک درخواست مجاز علامت میزند تا زمانی که بیتلی درخواست دسترسی داد، پذیرفته شود (بهشرط اینکه با استفاده از کلید اصلی امضا شود)
قدم ۵: مصرفکننده یک نشان(توکن) دسترسی دریافت میکند.
- بیتلی: توییتر آیا میتوانم نشان درخواست را با نشان دسترسی تعویض کنم؟
- توییتر: حتماً. این نشان دسترسی و کلید اصلی را بگیرید.
قدم ۶: مصرفکننده به منابع محافظت شده دسترسی پیدا میکند.
- bitly: من میخواهم این لینک را بهحساب توییتر آریا پست کنم. این هم نشان دسترسی من!
- توییتر: انجام شد!
در این سناریو، آریا هرگز مجبور نیست که نام کاربری و پسورد توییتر خود را با بیتلی به اشتراک بگذارد. او بهسادگی با استفاده از OAuth و به شیوهای کاملاً امن دسترسی را به بیتلی ارائه داد. با این حال و در هر زمان، آریا میتواند وارد حساب توییتر شود و دسترسی داده شده را بازبینی کند و نشانهای صادر شده را بدون تأثیر بر سایر اپلیکیشنها حذف کند. OAuth قادر است تا مجوزهای لازم را در سطوح دقیقتر هم صادر کند؛ مثلاً به بیتلی اجازه دهید که بهحساب توییتر شما پست کند اما دسترسی لینکدین را فقط به خواندن محدود کنید.
مقایسه نسخه ۱ با نسخه ۲ OAuth
OAuth 2 یک طراحی مجدد کامل از OAuth 1 است و این دو نسخه با هم سازگار نیستند. اگر شما در حال حاضر یک اپلیکیشن جدید ایجاد کنید، از OAuth 2 استفاده میکنید. ازآنجاییکه OAuth 1 دیگر استفاده نمیشود این مقاله، فقط برای OAuth 2 نوشته شده است.
OAuth 2 سریعتر و آسانتر اجرا میشود. OAuth 1 از رمزنگاریهای پیچیده استفاده میکرد که فقط ۳ درخواست را پشتیبانی میکرد و مقیاسپذیر هم نبود.
اما OAuth 2 شش درخواست برای انواع متفاوت اپلیکیشن دارد و رمزهای امضا شده را در https قبول میکند. نشانهای OAuth در نسخه ۲ دیگر نیازی به رمزنگاری در مبدأ و مقصد ندارند ازآنجاییکه آنها در زمان انتقال رمزنگاری میشوند.
کلام آخر
امیدواریم که این مقاله نقطه شروع خوبی برای آشنایی شما با OAuth 2 است تا دفعه بعد که پیام «ورود با حساب توییتر» را میبینید، بهخوبی آگاه باشید که چه اتفاقی برای حساب کاربری و دادههای شما میافتد.
با این حال، همیشه URLهای بازدیدی را چک کنید و مطمئن شوید که در همانجایی هستید که باید باشید و مهمتر اینکه نام کاربری و پسورد خود را به اشتراک نگذارید!