مقدمهای بر استاندارد OAuth
مقدمهای بر استاندارد OAuth یک توصیف غیرفنی از OAuth به عنوان یک استاندارد باز برای مجوزدهی و اعطای دسترسی است که چگونگی ارتباط امن سرویسدهنده و سرویسهای جدا از هم برای ایجاد دسترسی تصدیق شده به داراییها بدون نیاز به اشتراک اعتبارنامه را توصیف میکند.
این استاندارد معمولاً توسط کاربران اینترنت برای تضمین دسترسی وبسایتها و برنامههای کاربردی به اطلاعات آنها در دیگر وبسایتها بدون ارائه اعتبارنامه استفاده میشود. OAuth استانداردی است که برنامههای کاربردی میتوانند از آن برای ارائه دسترسی اعطایی امن (Secure Delegated Access) به برنامههای کاربردی مشتری استفاده کنند.
این استاندارد که بر روی پروتکل HTTPS کار میکند مجوز دسترسی دستگاهها، واسطهای برنامهنویسی برنامه کاربردی (API)، سرویسدهنده و برنامههای کاربردی را به جای اعتبارنامه با توکنهای دسترسی صادر مینماید.
این استاندارد شامل دو نسخه OAuth 1.0a و OAuth 2.0 است که جزییات آنها کاملاً با هم متفاوت است و نمیتوانند به صورت همزمان مورد استفاده قرار گیرند. OAuth 2.0 که توسط گروه ویژه مهندسی اینترنت (Internet Engineering Task Force) ارائه شده است در سال 2012 و RFC 6749 جایگزین نسخه اول آن شد. این استاندارد به صورت گسترده توسط شرکتهای معتبری نظیر آمازون، مایکروسافت، فیسبوک، پیپال مورد استفاده قرار میگیرد.
معرفی OAuth 2.0
پروتکل OAuth 2.0 یک استاندارد صنعتی در حوزه مجوزدهی است که در کنار تسهیل توسعه بر روی ارائه جریانهای اختصاصی مجوزدهی برای برنامههای کاربردی تحت وب، برنامههای کاربردی دسکتاپ، تلفنهای موبایل و تجهیزات خانگی متمرکز است.
OAuth 2.0 در پاسخ به الگوی احراز هویت مستقیم ایجاد شد. این الگو از طریق احراز هویت پایه HTTPS شهرت یافت که نیازمند استفاده از نام کاربری و گذرواژه بود. احراز هویت پایه همچنان به عنوان شکل بدوی احراز هویت API برای برنامههای کاربردی سمت سرور مورد استفاده قرار میگیرد. کاربر در این روش به جای ارسال نام کاربری و گذرواژه در هر درخواست میتواند از ارسال شناسه کلید API و مقدار محرمانه استفاده نماید.
سادهترین مثال از کاربرد OAuth برای زمانی است که کاربر میخواهد وارد یک وبسایت شود و با چندین گزینه شامل سرویسهای ورود دیگر وبسایتها (لاگین با گوگل) مواجه است. اگر کاربر این گزینه را انتخاب نماید عملیات احراز او با سرویس وبسایت دوم انجام شده و امکان دسترسی او به وبسایت اول فراهم میشود.
استاندارد OAuth 2.0 به صورت عمدی از رمزنگاری، امضاء، تأیید مشتری یا نگاشت کانال (پیوند یک نشست یا تراکنش خاص با یک سرویسدهنده یا مشتری مشخص) پشتیبانی نمیکند و تعریف دقیقی برای آنها ارائه نکرده است. به جای آن، این استاندارد انتظار دارد که توسعهدهندگان از پروتکلهای حفاظتی خارجی مانند امنیت لایه انتقال (TSL) برای ارائه ویژگیهای اشاره شده استفاده کنند.
OAuth یک پروتکل احراز هویت نیست. توسعهدهندگان برنامههای کاربردی معمولاً از OAuth در داخل پروتکلهای احراز هویت استفاده میکنند و این باور نادرست در بین آنها ایجاد شده است که میتوانند آن را برای احراز هویت کاربران نیز به کار ببرند. این باور نه تنها درست نیست بلکه میتواند عواقب ناخوشایندی برای ارائهدهندگان سرویس، توسعهدهندگان و کاربران نهایی داشته باشد.
مؤلفههای اصلی OAuth 2.0
استاندارد OAuth 2.0 از مؤلفههای اصلی زیر تشکیل شده است.
-
- محدودهها و رضایت
- بازیگران
- مشتریها
- توکنها
- سرور مجوزدهی
- جریانها
محدوده همان چیزی است که در زمان درخواست مجوز برنامه کاربردی در صفحه مجوزدهی قابل مشاهده میباشد. در هنگام درخواست توکن معمولاً چندین مجوز از مشتری درخواست میشود که توسط توسعهدهنده برنامه کاربردی تعیین شدهاند. حوزهها میتوانند سیاستهای مجوزدهی را از اجرا جدا نمایند که اولین جنبه کلیدی OAuth نیز به شمار میرود. لیست مجوزها معمولاً در مستندات API مشخص میشود که بیانگر الزامات محدوده برنامه کاربردی نیز هست.
کاربر در این استاندارد باید رضایت خود را ثبت نماید که به معنای اعتماد در اولین استفاده از وبسایت یا برنامه کاربردی میباشد. مفهوم رضایت با توجه به برنامههای کاربردی تعیین میشود. با این وجود، OAuth 2.0 با حذف الزام وارد کردن نام کاربری و گذرواژه در صفحات محیط وب بهبود قابل توجهی در تجربه کاربری ایجاد کرده است.
مقیاسپذیری این استاندارد با توجه به عملکرد مستقل برای هر برنامه کاربردی بسیار بالا است و میتواند کل اینترنت را پوشش دهد. کاربر با بهرهگیری از این استاندارد میتواند یک پروفایل از مجوزهای ارائه شده تهیه نماید و در صورت نیاز نسبت به حذف مجوزهای اعطا شده اقدام کند.
بازیگران متعددی در OAuth 2.0 ایفای نقش میکنند که در ادامه به آنها اشاره شده است.
-
- مالک منبع: مالکیت داده و سرویسدهنده منبع را بر عهده دارد. مالک منبع میتواند با توجه به اعتبارنامههای مختلف تغییر کند.
- سرویسدهنده منبع: واسط برنامهنویسی برنامه کاربردی که دادههای مورد نیاز برنامه کاربردی را ذخیره مینماید.
- مشتری/ متقاضی: برنامه کاربردی که میخواهد به دادههای کاربر دسترسی داشته باشد. مشتری میتواند عمومی یا محرمانه باشد.
- سرویسدهنده مجوزدهی: موتور اصلی استاندارد OAuth است.
توکنهای دسترسی بیانگر توکن مورد استفاده کاربران برای دسترسی مدتدار به سرویسدهنده منبع است. برای دریافت توکن دسترسی نیازی به یک مشتری محرمانه نیست و میتوان با مشتری عمومی نیز توکنهای دسترسی را به دست آورد. این توکنهای کوتاه مدت و مقیاسپذیر برای بهینهسازی مشکلات در مقیاس اینترنت طراحی شدهاند.
جریانها معرف سناریوهای احراز هویت استاندارد OAuth هستند که به مالک منبع (کاربر) اجازه میدهند تا محتوای محافظت شده موجود در سرویسدهنده منبع را بدون افشای اعتبارنامه به اشتراک بگذارد. سرویسدهنده OAuth 2.0 برای اشتراک دادههای محافظت شده از توکنهای دسترسی استفاده میکند.
چارچوب مجوزدهی OAuth 2.0
چارچوب مجوزدهی OAuth 2.0 به برنامههای کاربردی شخص ثالث اجازه میدهد تا دسترسی محدودی برای سرویس HTTPS از جانب مالک منبع یا خود برنامههای کاربردی شخص ثالث فراهم آورند. دسترسی به واسطه مالک منبع از طریق هماهنگسازی تعاملات تصویب (Approval) انجام شده مابین مالک منبع و سرویس HTTPS بهدست میآید.
OAuth 2.0 یک چارچوب مجوزدهی قدرتمند با ویژگیهای امنیتی به خوبی تعریف شده فراهم میکند با این وجود، جزییاتی مانند ثبتنام مشتری، قابلیتهای سرور مجوزدهی و کشف نقاط نهایی در آن دیده نشده است. مشتریها بدون این مؤلفهها باید بهصورت دستی و خاص در برابر سرویسدهنده مجوزدهی و سرویسدهنده منبع مشخص پیکربندی شوند. این چارچوب با انتظارات روشن در مورد تعریف پروفایلهای تجویزی جدید به واسطه کارهای آینده و افزونههای ضروری برای دستیابی به همکاری متقابل در مقیاس وب تعریف شده است.
نویسنده: تورج اکبری
[1] OAuth 2.0, www.oauth.net, 2019
[2] What the Heck is OAuth, Matt Raible, Okta, 2017
[3] The OAuth 2.0 Authorization framework, OAuth working Group, IETF, 2013
[4] What is OAuth? How the open Authorization Framework works, Roger A. Grimes, Josh Fruhlinger, 2019