تاریخچه OAuth: از رمز عبور تا استانداردهای جهانی

هر روز آن را می‌بینید. روی «ورود با Google» یا «ورود با GitHub» کلیک می‌کنید. رمز عبور تایپ نمی‌کنید. بلافاصله وارد سایت می‌شوید.

این فرآیند به لطف OAuth کار می‌کند. این یک استاندارد جهانی برای امنیت است. اما از این شکل شروع نشده بود؛ بلکه برای حل مشکلات بزرگ تکامل یافت.

مشکل رمزهای عبور

در روزهای اولیه، شما برای هر وب‌سایت یک رمز عبور جدید می‌ساختید. این موضوع باعث سه مشکل بزرگ می‌شد:

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

تکامل امنیت

۱. Basic Auth: شما نام کاربری و رمز عبور خود را با هر درخواست ارسال می‌کردید. اگر از HTTPS استفاده نمی‌کردید، هکرها می‌توانستند همه چیز را ببینند.

۲. Session Cookies: شما یک بار وارد می‌شدید و یک شناسه نشست (session ID) دریافت می‌کردید. این روش بهتر بود، اما کوکی‌ها را می‌توان از طریق حملاتی مانند XSS یا CSRF سرقت کرد. همچنین، یک سایت نمی‌توانست از ورود شما برای صحبت با سایت دیگری استفاده کند.

۳. API Keys: شما یک کلید مخصوص به وب‌سایت می‌دادید. این روش بهتر بود چون رمز عبور خود را ارسال نمی‌کردید. با این حال، API keys اغلب قدرت بیش از حدی دارند. اگر یک API key را به یک اپلیکیشن بدهید، آن اپلیکیشن ممکن است قدرت خواندن ایمیل‌ها، ارسال پیام‌ها و حذف حساب شما را داشته باشد. این کار مثل این است که کلید ماشین خود را به پارک‌بان (valet) هتل بدهید، اما آن کلید درِ خانه شما را هم باز کند.

راهکار OAuth: کلید پارک‌بان (Valet Key)

OAuth بازی را تغییر داد. به جای دادن رمز عبور، شما یک «توکن» (token) می‌دهید. آن را مانند یک کلید پارک‌بان تصور کنید. کلید پارک‌بان به راننده اجازه می‌دهد ماشین شما را پارک کند، اما اجازه نمی‌دهد صندوق عقب را باز کند یا به خانه شما دسترسی داشته باشد.

نحوه عملکرد OAuth در عمل:

  • شما می‌خواهید از Canva استفاده کنید و عکس‌ها را از Google فراخوانی کنید.
  • Canva از Google اجازه می‌گیرد.
  • Google از شما می‌پرسد: «آیا Canva اجازه دارد عکس‌های شما را مشاهده کند؟»
  • شما می‌گویید: «بله، اما فقط مشاهده. اجازه ندهید چیزی را حذف کنند.»
  • Google یک توکن خاص به Canva می‌دهد.

Canva هرگز رمز عبور Google شما را نمی‌بیند. حتی اگر هکری آن توکن را سرقت کند، فقط برای مدت کوتاهی می‌تواند عکس‌ها را مشاهده کند. آن‌ها نمی‌توانند رمز عبور شما را تغییر دهند یا پول شما را جابه‌جا کنند.

امنیت مدرن: PKCE

اپلیکیشن‌های موبایل و وب یک نقطه ضعف دارند: آن‌ها نمی‌توانند اسرار (secrets) را به خوبی پنهان کنند. برای رفع این مشکل، از PKCE (Proof Key for Code Exchange) استفاده می‌کنیم.

این روش مانند یک سیستم رزرو عمل می‌کند:

  • اپلیکیشن یک کد مخفی (verifier) ایجاد می‌کند.
  • اپلیکیشن نسخه هش‌شده آن کد (challenge) را به Google می‌فرستد.
  • وقتی اپلیکیشن درخواست توکن می‌کند، کد مخفی اصلی را ارسال می‌کند.
  • Google بررسی می‌کند که آیا کد با challenge مطابقت دارد یا خیر.

اگر مطابقت داشته باشند، Google می‌فهمد که این همان اپلیکیشن است. اگر مطابقت نداشته باشند، Google درخواست را مسدود می‌کند. این کار مانع از آن می‌شود که هکرها authorization code شما را سرقت کنند.

نقشه راه OAuth

  • ۲۰۰۷ (OAuth 1.0): بسیار پیچیده بود و از محاسبات سنگین ریاضی استفاده می‌کرد.
  • ۲۰۱۲ (OAuth 2.0): سریع‌تر و ساده‌تر. از توکن‌ها استفاده می‌کرد و به HTTPS نیاز داشت.
  • ۲۰۱۶ (OAuth 2.0 + PKCE): امنیت را برای اپلیکیشن‌های موبایل و وب مدرن افزایش داد.
  • ۲۰۲۳ (OAuth 2.1): استاندارد طلایی جدید. روش‌های قدیمی و ناامن را حذف می‌کند.

درس اصلی: هرگز رمز عبور خود را به اپلیکیشن دیگری ندهید. به آن‌ها یک بلیط محدود که منقضی می‌شود بدهید. این‌گونه کنترل در دست خودتان باقی می‌ماند.

Source: https://dev.to/gophernment/oauth-elaaaebbprawatisaastr-cchaakrhasphaan-suumaatrthaanolk-16b4