راهنمای کامل احراز هویت با JWT، توکن دسترسی access token، توکن تجدید refresh token و چرخش توکن token rotation

راهنمای کامل احراز هویت با JWT، توکن دسترسی access token، توکن تجدید refresh token و چرخش توکن token rotation

مقدمه

احراز هویت مدرن برای API ها معمولا با JWT انجام میشود. هدف این مقاله توضیح ساده و دقیق ساختار JWT، تفاوت های توکن دسترسی access token و توکن تجدید refresh token، مفهوم token rotation و فرایند احراز هویت امن است. این مطلب مناسب توسعه دهندگان وب و مدیران محصول است که میخواهند سیستم احراز هویت ایمن و مقیاس پذیر بسازند.

⏱ زمان مطالعه: 6 دقیقه | 📝 تعداد کلمات: 675

نمودار کلی کاربرد JWT و refresh token در احراز هویت API

JWT چیست؟

JWT فرمتی استاندارد برای حمل اطلاعات (claims) بین سرویس ها است. یک JWT سه بخش دارد: header، payload و signature.

header نوع الگوریتم و نوع توکن را مشخص میکند. payload شامل اطلاعاتی مانند sub، iat و exp است. و در واقع این signature است که تضمین میکند محتوا تغییر نکرده است.
ویژگی مهم JWT این است که استیت لس است. یعنی سرور برای اعتبارسنجی میتواند فقط با کلید امضای خود تایید کند و نیازی به ذخیره سشن در سرور ندارد. اما همین استیت لس بودن خطراتی دارد که باید با طراحی درست کنترل شوند، مخصوصا در مورد لغو توکن و طول عمر.

دیاگرام header payload signature در JWT و refresh token

تفاوت access token و refresh token

توکن دسترسی access token معمولا کوتاه مدت است. برای دسترسی به منابع API ارسال میشود. طول عمر کوتاه، باعث کاهش اثار مخرب توکن لو رفته میشود.
توکن تجدید refresh token طول عمر بلندتری دارد و فقط برای گرفتن access token جدید استفاده میشود. «refresh token» معمولاً به صورت امن ذخیره میشود و کمتر در درخواست ها ارسال میشود.
نکته‌هایی درباره ذخیره‌سازی (مهم): هرگز refresh token یا access token حساس را در جاوااسکریپت قابل دسترسی نگه ندارید. استفاده از کوکی های HttpOnly و Secure با Same Site مناسب امن تر است.

جدول مقایسه طول عمر، نحوه استفاده و ریسک های access token و refresh token در JWT و refresh token
نمایش انواع ذخیره سازی امن توکن ها، کوکی HttpOnly و ذخیره سازی موبایل در JWT و refresh token

Token Rotation چیست و چرا مهم است؟

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

الگوریتم معمول:
۱. کاربر درخواست رفرش میدهد با refresh token.
۲. سرور بررسی میکند توکن معتبر و استفاده نشده باشد.
۳. اگر معتبر بود، یک access token و یک refresh token جدید صادر میشود.
۴. توکن قدیمی در لیست باطل شده یا وضعیت استفاده شده قرار میگیرد.
در صورت تشخیص استفاده مجدد از توکن قبلی، حساب یا session باید به حالت قرنطینه برود و کاربر مجبور به ورود مجدد شود.

فلوچارت چرخش توکن و باطل سازی توکن های قدیمی در JWT و refresh token

فرایند احراز هویت با JWT و refresh token

  1. ورود کاربر: کاربر نام‌کاربری و رمز عبور ارسال می‌کند.
  2. اعتبارسنجی: سرور اعتبار کاربر را بررسی می‌کند.
  3. صدور توکن‌ها: سرور یک access token کوتاه و یک refresh token طولانی صادر می‌کند.
  4. ذخیره امن: access token در حافظه کوتاه یا کوکی با عمر کوتاه و refresh token در کوکی HttpOnly ذخیره می‌شود.
  5. درخواست‌های محافظت‌شده: کلاینت access token را در هدر Authorization ارسال می‌کند. سرور آن را بررسی می‌کند.
  6. رفرش توکن: اگر access token منقضی شد، کلاینت با refresh token درخواست توکن جدید می‌دهد. در صورت استفاده از token rotation، توکن جدید صادر و توکن قبلی باطل می‌شود.
  7. خروج و باطل‌سازی: در خروج، refresh token در سمت سرور باطل می‌شود یا در لیست سیاه قرار می‌گیرد.
دیاگرام ورود، صدور توکن، رفرش و خروج در سیستم مبتنی بر JWT
نمایش سناریو های تشخیص استفاده مجدد و اقدامات امنیتی

بهترین شیوه‌های امنیتی برای JWT و refresh token

۱. مدت عمر access token را کوتاه نگه دارید.
۲. refresh token را در کوکی HttpOnly و Secure را با SameSite مناسب نگه دارید.
۳. از token rotation استفاده کنید تا حملات replay کاهش یابد.
۴. تشخیص استفاده مجدد از refresh token و واکنش مناسب.
۵. امکان باطل سازی سمت سرور (blacklist یا token store) فراهم کنید برای logout و تغییر رمز.
۶. از TLS همیشه استفاده کنید.
۷. اطلاعات («aud», «iss», «exp») را درست تنظیم کنید.
۸. از کتابخانه‌های شناخته شده استفاده کنید، مثلا برای Django از djangorestframework-simplejwt و برای وردپرس از افزونه های JWT معتبر. بازنویسی پیاده‌ سازی امضا و رمزنگاری خودتان معمولا اشتباه و پرخطر است.

لیست بهترین شیوه ها برای ایمن سازی توکن ها و API ها
تصویر نمایانگر افزونه JWT و refresh token و REST API در WordPress
تصویر نمایانگر افزونه JWT و refresh token و REST API در WordPress

جمع‌بندی

JWT و refresh token پایه‌ای‌ترین روش مدرن برای احراز هویت امن هستند. استفاده درست از token rotation، ذخیره امن توکن‌ها و بهترین شیوه‌های امنیتی باعث می‌شود سیستم شما هم ایمن باشد و هم تجربه کاربری خوبی فراهم کند.

دیگر مقالات سایت

3.7 3 رأی‌ها
امتیاز مقاله
guest
0 دیدگاه
قدیمی‌ترین
جدیدترین بیشترین رأی
بازخوردهای درون‌خطی
مشاهده همه دیدگاه‌ها
پیمایش به بالا