برنامه نویسی

درک JSON Web Tokens (JWT) برای به اشتراک گذاری امن اطلاعات

Summarize this content to 400 words in Persian Lang
در دنیای معماری نرم‌افزار، به‌ویژه زمانی که با چندین طرف سروکار دارید و احراز هویت/مجوز امن، مکانیزم قوی برای اشتراک‌گذاری مدرک هویت بسیار مهم است. یکی از ایمن ترین و پرکاربردترین روش ها، JSON Web Token (JWT) است.

در این وبلاگ، ما عمیقاً به این می پردازیم که JWT ها چیست، چگونه کار می کنند، و چرا آنها یک انتخاب عالی برای انتقال امن داده ها هستند.

توکن وب JSON (JWT) چیست؟

JSON Web Token (JWT) یک استاندارد باز (RFC 7519) است که روشی فشرده و مستقل برای انتقال امن اطلاعات بین طرفین را به عنوان یک شی JSON تعریف می کند. این اطلاعات به دلیل امضای دیجیتالی قابل تأیید و اعتماد است. JWT ها را می توان با استفاده از یک رمز (با الگوریتم HMAC) یا یک جفت کلید عمومی/خصوصی با استفاده از RSA یا ECDSA امضا کرد.

چرا از JWT استفاده کنیم؟

JWT ها بدون حالت هستند، به این معنی که سرور نیازی به ذخیره اطلاعات توکن در جلسه ندارد. این ماهیت بدون حالت باعث می شود JWT ها مقیاس پذیر و مناسب برای برنامه های کاربردی مشتری-سرور و سیستم های توزیع شده باشند. در اینجا چند دلیل کلیدی وجود دارد که چرا JWT ها ترجیح داده می شوند:

امنیت: JWT ها به صورت دیجیتالی امضا شده اند و اطمینان حاصل می شود که داده ها دستکاری نمی شوند.

مقیاس پذیری: از آنجایی که JWT ها بدون وضعیت هستند، نیازی به ذخیره سازی سمت سرور ندارند، که آنها را برای سیستم های توزیع شده ایده آل می کند.

فشرده – جمع و جور: JWT ها فشرده هستند و می توانند به راحتی از طریق URL، پارامتر POST یا هدر HTTP ارسال شوند.

خودکفا: محموله یک JWT شامل تمام اطلاعات لازم برای کاربر مورد نظر است و نیازی به پرس و جو از پایگاه داده چندین بار را از بین می برد.

ساختار یک JWT

یک JWT از سه بخش تشکیل شده است: سربرگ، بارگذاری و امضا. این قسمت ها با نقطه (.) از هم جدا می شوند.

Header.Payload.Signature

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید هر جزء را تجزیه کنیم:

1️⃣ سربرگ

هدر معمولاً از دو بخش تشکیل شده است: نوع توکن که JWT است و الگوریتم امضای مورد استفاده مانند HMAC، SHA256 یا RSA.

مثال:

{
“alg”: “HS256”,
“typ”: “JWT”
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این شی JSON سپس Base64Url کدگذاری می شود تا اولین قسمت JWT را تشکیل دهد.

2️⃣ بار

محموله حاوی مطالبات است. ادعاها اظهاراتی در مورد یک نهاد (معمولاً کاربر) و داده های اضافی هستند. سه نوع دعاوی وجود دارد: دعاوی ثبتی، عمومی و خصوصی.

ادعاهای ثبت شده: اینها مجموعه ای از ادعاهای از پیش تعریف شده هستند که اجباری نیستند بلکه توصیه می شوند، مانند iss (صادر کننده)، exp (زمان انقضا)، sub (موضوع)، aud (مخاطب) و دیگران.

ادعاهای عمومی: اینها را می توان به دلخواه تعریف کرد اما باید در برابر برخورد مقاوم باشند یا دارای فضای نام باشند.

ادعاهای خصوصی: اینها ادعاهای سفارشی هستند که برای به اشتراک گذاشتن اطلاعات بین طرفینی که در مورد استفاده از آنها توافق دارند ایجاد می شوند.

مثال:

{
“sub”: “1234567890”,
“name”: “John Doe”,
“admin”: true
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این شی JSON همچنین Base64Url کدگذاری شده است تا قسمت دوم JWT را تشکیل دهد.

3️⃣ امضا

برای ایجاد قسمت امضا، باید هدر کدگذاری شده، بار رمزگذاری شده، یک راز و الگوریتم مشخص شده در هدر را بگیرید. از امضا برای تأیید اینکه فرستنده JWT همان کسی است که می گوید و اطمینان حاصل شود که پیام در طول مسیر تغییر نکرده است استفاده می شود.

به عنوان مثال، اگر می خواهید از الگوریتم HMAC SHA256 استفاده کنید، امضا به صورت زیر ایجاد می شود:

HMACSHA256(
base64UrlEncode(header) + “.” +
base64UrlEncode(payload),
secret)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس امضا Base64Url کدگذاری می شود و قسمت سوم JWT را تشکیل می دهد.

JWT چگونه کار می کند

هنگامی که یک کلاینت می خواهد به یک منبع محافظت شده دسترسی پیدا کند، JWT را در سربرگ مجوز درخواست HTTP، مشابه یک توکن حامل، شامل می شود. سرور مجموعه ای از مراحل را برای تأیید اعتبار JWT انجام می دهد. اگر تمام مراحل اعتبار سنجی بگذرد، سرور JWT را معتبر می داند و به منبع درخواستی دسترسی می دهد.

در اینجا مراحل انجام می شود:

1️⃣ رمزگشایی JWT: سرور JWT را رمزگشایی می کند تا هدر و بار را استخراج کند.

2️⃣ تایید امضا: سرور امضا را با اعمال مجدد الگوریتم امضا در هدر، بار و کلید مخفی تأیید می کند. اگر امضای محاسبه شده مجدد با امضای JWT مطابقت داشته باشد، نشان می دهد که توکن دستکاری نشده است.

3️⃣ بررسی انقضا: سرور زمان انقضا در بار را بررسی می کند تا مطمئن شود که توکن منقضی نشده است.

4️⃣ چک های اضافی: بسته به نیازهای برنامه، سرور ممکن است بررسی‌های بیشتری را انجام دهد، مانند تأیید صادرکننده رمز یا بررسی توکن در برابر فهرستی از نشانه‌های باطل شده.

JWT در سناریوهای دنیای واقعی

بیایید برخی از کاربردهای عملی JWT ها در سال 2024 را بررسی کنیم:

Single Sign-On (SSO) Wonderland: تصور کنید که یک بار وارد اکوسیستم شرکت خود شده اید و به چندین سرویس یکپارچه دسترسی دارید. JWT ها این رویا را به واقعیت تبدیل می کنند و به طور ایمن وضعیت احراز هویت شما را در دامنه های مختلف منتقل می کنند.
رقص میکروسرویس:در دنیای میکروسرویس ها، JWT ها به عنوان پیام رسان کامل عمل می کنند. آنها اطلاعات احراز هویت و مجوز را بین سرویس ها حمل می کنند و از ارتباطات ایمن و کارآمد اطمینان می دهند.
احراز هویت دستگاه اینترنت اشیا:همانطور که یخچال هوشمند شما با توستر هوشمند شما صحبت می کند (بله، ما در سال 2024 آنجا هستیم)، JWT ها اطمینان حاصل می کنند که فقط دستگاه های مجاز می توانند داده ها را مبادله کنند.
مجوز عملکرد بدون سرور:با ظهور معماری‌های بدون سرور، JWT‌ها روشی بدون حالت برای مجوز فراخوانی تابع بدون نیاز به جلسات مداوم ارائه می‌کنند.

بهترین شیوه های JWT برای سال 2024

آن را مخفی نگه دارید، آن را ایمن نگه دارید: از کلیدهای امضای خود مانند یک حلقه محافظت کنید. از خدمات مدیریت کلید استفاده کنید و به طور منظم کلیدها را بچرخانید.
توکن های خود را بیش از حد بسته بندی نکنید: محموله ها را کوچک نگه دارید. JWT ها جایگزین پایگاه های داده نیستند!
زمان انقضا معقول را تنظیم کنید: توکن‌های کوتاه‌مدت (دقایق فکر کنید، نه روزها) در صورت به خطر افتادن یک توکن، خطر را به حداقل می‌رسانند.
اجرای لغو توکن: از یک لیست سیاه توکن یا یک کش Redis برای باطل کردن توکن ها در صورت نیاز استفاده کنید.
HTTPS تمام راه: همیشه JWT ها را از طریق اتصالات رمزگذاری شده ارسال کنید. بدون استثناء!

JWT در عمل

JWT ها فوق العاده همه کاره هستند و می توانند در سناریوهای مختلف مورد استفاده قرار گیرند. به عنوان مثال، آنها معمولاً برای تأیید APIهای Backend در حالی که همان مجموعه مجوزها را حفظ می کنند، استفاده می شوند. بسیاری از برنامه های کاربردی مدرن، از جمله Appwrite، از احراز هویت مبتنی بر JWT پشتیبانی می کنند تا از فرآیندهای مجوزدهی ایمن و کارآمد اطمینان حاصل کنند.

نتیجه

JSON Web Tokens (JWT) ابزاری قدرتمند برای به اشتراک گذاری امن اطلاعات در برنامه های کاربردی وب مدرن است. آنها یک روش فشرده، مستقل و ایمن برای انتقال داده‌ها ارائه می‌کنند که آنها را به انتخابی عالی برای موارد استفاده مختلف، از احراز هویت بدون حالت تا APIهای ایمن تبدیل می‌کند. با درک و پیاده سازی JWT ها، توسعه دهندگان می توانند امنیت و مقیاس پذیری برنامه های خود را افزایش دهند.

در دنیای معماری نرم‌افزار، به‌ویژه زمانی که با چندین طرف سروکار دارید و احراز هویت/مجوز امن، مکانیزم قوی برای اشتراک‌گذاری مدرک هویت بسیار مهم است. یکی از ایمن ترین و پرکاربردترین روش ها، JSON Web Token (JWT) است.

در این وبلاگ، ما عمیقاً به این می پردازیم که JWT ها چیست، چگونه کار می کنند، و چرا آنها یک انتخاب عالی برای انتقال امن داده ها هستند.

توکن وب JSON (JWT) چیست؟

JSON Web Token (JWT) یک استاندارد باز (RFC 7519) است که روشی فشرده و مستقل برای انتقال امن اطلاعات بین طرفین را به عنوان یک شی JSON تعریف می کند. این اطلاعات به دلیل امضای دیجیتالی قابل تأیید و اعتماد است. JWT ها را می توان با استفاده از یک رمز (با الگوریتم HMAC) یا یک جفت کلید عمومی/خصوصی با استفاده از RSA یا ECDSA امضا کرد.

چرا از JWT استفاده کنیم؟

JWT ها بدون حالت هستند، به این معنی که سرور نیازی به ذخیره اطلاعات توکن در جلسه ندارد. این ماهیت بدون حالت باعث می شود JWT ها مقیاس پذیر و مناسب برای برنامه های کاربردی مشتری-سرور و سیستم های توزیع شده باشند. در اینجا چند دلیل کلیدی وجود دارد که چرا JWT ها ترجیح داده می شوند:

  1. امنیت: JWT ها به صورت دیجیتالی امضا شده اند و اطمینان حاصل می شود که داده ها دستکاری نمی شوند.
  2. مقیاس پذیری: از آنجایی که JWT ها بدون وضعیت هستند، نیازی به ذخیره سازی سمت سرور ندارند، که آنها را برای سیستم های توزیع شده ایده آل می کند.
  3. فشرده – جمع و جور: JWT ها فشرده هستند و می توانند به راحتی از طریق URL، پارامتر POST یا هدر HTTP ارسال شوند.
  4. خودکفا: محموله یک JWT شامل تمام اطلاعات لازم برای کاربر مورد نظر است و نیازی به پرس و جو از پایگاه داده چندین بار را از بین می برد.

Jwt

ساختار یک JWT

یک JWT از سه بخش تشکیل شده است: سربرگ، بارگذاری و امضا. این قسمت ها با نقطه (.) از هم جدا می شوند.

Header.Payload.Signature
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید هر جزء را تجزیه کنیم:

1️⃣ سربرگ

هدر معمولاً از دو بخش تشکیل شده است: نوع توکن که JWT است و الگوریتم امضای مورد استفاده مانند HMAC، SHA256 یا RSA.

مثال:

{
  "alg": "HS256",
  "typ": "JWT"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این شی JSON سپس Base64Url کدگذاری می شود تا اولین قسمت JWT را تشکیل دهد.

2️⃣ بار

محموله حاوی مطالبات است. ادعاها اظهاراتی در مورد یک نهاد (معمولاً کاربر) و داده های اضافی هستند. سه نوع دعاوی وجود دارد: دعاوی ثبتی، عمومی و خصوصی.

  • ادعاهای ثبت شده: اینها مجموعه ای از ادعاهای از پیش تعریف شده هستند که اجباری نیستند بلکه توصیه می شوند، مانند iss (صادر کننده)، exp (زمان انقضا)، sub (موضوع)، aud (مخاطب) و دیگران.
  • ادعاهای عمومی: اینها را می توان به دلخواه تعریف کرد اما باید در برابر برخورد مقاوم باشند یا دارای فضای نام باشند.
  • ادعاهای خصوصی: اینها ادعاهای سفارشی هستند که برای به اشتراک گذاشتن اطلاعات بین طرفینی که در مورد استفاده از آنها توافق دارند ایجاد می شوند.

مثال:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این شی JSON همچنین Base64Url کدگذاری شده است تا قسمت دوم JWT را تشکیل دهد.

3️⃣ امضا

برای ایجاد قسمت امضا، باید هدر کدگذاری شده، بار رمزگذاری شده، یک راز و الگوریتم مشخص شده در هدر را بگیرید. از امضا برای تأیید اینکه فرستنده JWT همان کسی است که می گوید و اطمینان حاصل شود که پیام در طول مسیر تغییر نکرده است استفاده می شود.

به عنوان مثال، اگر می خواهید از الگوریتم HMAC SHA256 استفاده کنید، امضا به صورت زیر ایجاد می شود:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس امضا Base64Url کدگذاری می شود و قسمت سوم JWT را تشکیل می دهد.

انجام دادن

JWT چگونه کار می کند

هنگامی که یک کلاینت می خواهد به یک منبع محافظت شده دسترسی پیدا کند، JWT را در سربرگ مجوز درخواست HTTP، مشابه یک توکن حامل، شامل می شود. سرور مجموعه ای از مراحل را برای تأیید اعتبار JWT انجام می دهد. اگر تمام مراحل اعتبار سنجی بگذرد، سرور JWT را معتبر می داند و به منبع درخواستی دسترسی می دهد.

در اینجا مراحل انجام می شود:

1️⃣ رمزگشایی JWT: سرور JWT را رمزگشایی می کند تا هدر و بار را استخراج کند.

رمزگشایی
2️⃣ تایید امضا: سرور امضا را با اعمال مجدد الگوریتم امضا در هدر، بار و کلید مخفی تأیید می کند. اگر امضای محاسبه شده مجدد با امضای JWT مطابقت داشته باشد، نشان می دهد که توکن دستکاری نشده است.

3️⃣ بررسی انقضا: سرور زمان انقضا در بار را بررسی می کند تا مطمئن شود که توکن منقضی نشده است.

4️⃣ چک های اضافی: بسته به نیازهای برنامه، سرور ممکن است بررسی‌های بیشتری را انجام دهد، مانند تأیید صادرکننده رمز یا بررسی توکن در برابر فهرستی از نشانه‌های باطل شده.

Jwt

JWT در سناریوهای دنیای واقعی

بیایید برخی از کاربردهای عملی JWT ها در سال 2024 را بررسی کنیم:

  1. Single Sign-On (SSO) Wonderland:
    تصور کنید که یک بار وارد اکوسیستم شرکت خود شده اید و به چندین سرویس یکپارچه دسترسی دارید. JWT ها این رویا را به واقعیت تبدیل می کنند و به طور ایمن وضعیت احراز هویت شما را در دامنه های مختلف منتقل می کنند.

  2. رقص میکروسرویس:
    در دنیای میکروسرویس ها، JWT ها به عنوان پیام رسان کامل عمل می کنند. آنها اطلاعات احراز هویت و مجوز را بین سرویس ها حمل می کنند و از ارتباطات ایمن و کارآمد اطمینان می دهند.

  3. احراز هویت دستگاه اینترنت اشیا:
    همانطور که یخچال هوشمند شما با توستر هوشمند شما صحبت می کند (بله، ما در سال 2024 آنجا هستیم)، JWT ها اطمینان حاصل می کنند که فقط دستگاه های مجاز می توانند داده ها را مبادله کنند.

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

بهترین شیوه های JWT برای سال 2024

  1. آن را مخفی نگه دارید، آن را ایمن نگه دارید:
    از کلیدهای امضای خود مانند یک حلقه محافظت کنید. از خدمات مدیریت کلید استفاده کنید و به طور منظم کلیدها را بچرخانید.

  2. توکن های خود را بیش از حد بسته بندی نکنید:
    محموله ها را کوچک نگه دارید. JWT ها جایگزین پایگاه های داده نیستند!

  3. زمان انقضا معقول را تنظیم کنید:
    توکن‌های کوتاه‌مدت (دقایق فکر کنید، نه روزها) در صورت به خطر افتادن یک توکن، خطر را به حداقل می‌رسانند.

  4. اجرای لغو توکن:
    از یک لیست سیاه توکن یا یک کش Redis برای باطل کردن توکن ها در صورت نیاز استفاده کنید.

  5. HTTPS تمام راه:
    همیشه JWT ها را از طریق اتصالات رمزگذاری شده ارسال کنید. بدون استثناء!

JWT در عمل

JWT ها فوق العاده همه کاره هستند و می توانند در سناریوهای مختلف مورد استفاده قرار گیرند. به عنوان مثال، آنها معمولاً برای تأیید APIهای Backend در حالی که همان مجموعه مجوزها را حفظ می کنند، استفاده می شوند. بسیاری از برنامه های کاربردی مدرن، از جمله Appwrite، از احراز هویت مبتنی بر JWT پشتیبانی می کنند تا از فرآیندهای مجوزدهی ایمن و کارآمد اطمینان حاصل کنند.

نتیجه

JSON Web Tokens (JWT) ابزاری قدرتمند برای به اشتراک گذاری امن اطلاعات در برنامه های کاربردی وب مدرن است. آنها یک روش فشرده، مستقل و ایمن برای انتقال داده‌ها ارائه می‌کنند که آنها را به انتخابی عالی برای موارد استفاده مختلف، از احراز هویت بدون حالت تا APIهای ایمن تبدیل می‌کند. با درک و پیاده سازی JWT ها، توسعه دهندگان می توانند امنیت و مقیاس پذیری برنامه های خود را افزایش دهند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا