اجرای Json Web Token (JWT) با استفاده از Node. js

ساخت وبلاگ

How ToT2 Dark_1200x303

JWT ها راهی برای مدیریت نگرانی های امنیتی ارائه می دهند. در این پست ، یاد بگیرید که چگونه JWT را در چهار مرحله تولید کنید. سرورهای وب باید با داشتن توانایی اعطای یا انکار دسترسی به هر نهاد در منابع خود ، نگرانی های امنیتی را مدیریت کنند. این کار را می توان با استفاده از چندین روش انجام داد که یکی از آنها جلسات است ، جایی که سرور از شناسه جلسه استفاده می کند ، که در یک درخواست برای تأیید اعتبار کاربر به یک کوکی وصل شده است. جلسات با چند موضوع مانند نیاز به ادامه شناسه جلسه به پایگاه داده خوب کار می کند. یکی دیگر از گزینه های محبوب که در این مقاله کشف و پیاده سازی خواهیم کرد ، با JSON Web Token (JWT) است. برای اطلاعات بیشتر در مورد JWTS ، پست قبلی من را در اینجا بررسی کنید. بدون آزار و اذیت بیشتر ، بیایید با تولید یک توکن وب JSON با استفاده از node. js. شروع کنیم.

پیش نیازها

  • node. js
  • بیان

نحوه تولید JWT

در این بخش یاد خواهیم گرفت که چگونه JWT ها از ابتدا ایجاد می شوند.

توجه: سایر بسته های شخص ثالث وجود دارد که پیچیدگی های ایجاد JWT را انتزاع می کند ، اما ما به خاطر وضوح آن را از ابتدا اجرا خواهیم کرد.

تنظیم فضای کاری

ترمینال خود را باز کنید و موارد زیر را وارد کنید:

node-jwt node-jwt node-jwt index. js 

کد فوق دایرکتوری به نام Node-JWT ایجاد می کند ، سپس پرونده ای به نام index. js را در داخل فهرست ایجاد می کند.

تولید JWT شامل انجام موارد زیر است:

  1. تولید یک هدر رمزگذاری شده Base64
  2. تولید بار رمزگذاری شده Base64
  3. ایجاد امضا با استفاده از راز و نتایج در مراحل 1 و 2
  4. ترکیب نتایج حاصل از مراحل 1 ، 2 و 3

قبل از اینکه هر مرحله بالا را طی کنیم ، روش های یاور زیر را در پرونده index. js خود وارد کنید تا به ما در دستیابی به موارد زیر کمک کند:

  1. یک رشته را به Base64 تبدیل کنید:
محاصره کردن TOBASE64 =تحقیر کردن=>  // OBJ را به یک رشته تبدیل می کند محاصره کردنstr=json.در حال کار کردن (تحقیر کردن); // رشته تبدیل شده به Base64 را برمی گرداند برگشتبافنده.از جانب(str).شیب دار ("Base64"); >; 

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

  1. نمادهای ویژه را در یک رشته Base64 جایگزین کنید:
محاصره کردن cheparescialchars =B64String=>  // ایجاد یک regex برای مطابقت با هر یک از کاراکترها = ،+ یا / / و آنها را با جایگزین های // جایگزین خود جایگزین کنید برگشتB64String.جایگزین کردن (/[=+/]/g,chartobereped=>  تعویض (chartobereped)  مورد '=': برگشت ''; مورد '+': برگشت '-'; مورد '/': برگشت '_'; > >); >; 

شاید تعجب کنید که چرا ما به روش دیگری برای جایگزینی نمادهای خاص در یک رشته Base64 نیاز داریم. دلیل این است که رشته های Base64 حاوی نمادهایی هستند که هنگام استفاده در URL به اشتباه تفسیر می شوند.

آشنایی با نشانه های وب JSON (JWT)

یعنی این نمادها هنگام کار با JWTS دوستانه URL نیستند. در زیر یک جدول ذکر شده است که همه آنها و جایگزین های آنها را برای وضوح بیشتر ذکر کرده است.

 

شخصیت تعویض
“ = ” “”
“ + ” “ - ”
“ / ” "_"

مرحله 1: تولید هدر

در مرحله بعد ، با ایجاد یک هدر نمونه برای نشانه با استفاده از یک شی انجام دهید.

// فرض کنید ما این هدر را داریم محاصره کردنسرتیتر= الود: 'HS256',تایپ کردن: 'JWT', >; محاصره کردنB64 Header= TOBASE64 (سرتیتر); محاصره کردنjwtb64header= cheparescialchars(B64 Header);کنسول.ورود به سیستم ("هدر:",jwtb64header); // خروجی هدر: eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9 

اینجا زیاد اتفاق نمی افتد. ما با ایجاد یک شیء نمونه شروع کردیم تا عنوان یک JWT باشد و آن را به یک URL Base64 رمزگذاری کنیم.

مرحله 2: تولید بار

مانند هدر ، ما یک بار توکن را از یک شی ایجاد می کنیم.

// نمونه بار نمونه محاصره کردنظرفیت ترابری= سر: 'a_random_server_name',// اطلاعات مربوط به سرور صادر شدهبیرونی: 872990,// تاریخ انقضا توکن در میلی ثانیه // اطلاعات مربوط به برخی از کاربر تصادفینام: "جان بابو",پست الکترونیک: 'myemail@test. com',ایشومان: درست است، واقعی, >; // بار بار را به Base64 تبدیل می کند محاصره کردنB64Payload= TOBASE64 (ظرفیت ترابری); محاصره کردنJWTB64Payload= cheparescialchars (B64Payload);کنسول.ورود به سیستم ("بار بار:",JWTB64Payload); ( 

به طور مشابه ، ما یک شیء را نشان دادیم که نشان دهنده نشانه URL Base64 است.

مرحله 3: تولید امضا

امضای همان چیزی است که JWT را قابل اعتماد می کند. برای تولید یکی ، ما از یکی از ماژول های اصلی گره به نام Crypto استفاده می کنیم. ماژول Crypto قابلیت های رمزنگاری را ارائه می دهد که شامل مجموعه ای از بسته بندی ها برای هش ، HMAC ، رمز ، رمزگشایی ، رمزگشایی و تأیید توابع OpenSSL است.

موارد زیر را به پرونده index. js خود اضافه کنید:

// ماژول رمزنگاری را بیاورید محاصره کردنرمز= نیاز ("رمزنگاری"); محاصره کردن ایجاد نشاط =(jwtb64header,JWTB64Payload,راز)=> // ایجاد HMAC (کد احراز هویت پیام مبتنی بر هش) با استفاده از alg sha256 اجازه دهیدامضاء=رمز.کربن ('sha256',راز); // از روش بروزرسانی استفاده کنید تا یک رشته از jwtb64header ما در یک دوره تشکیل شود و // JWTB64Payloadامضاء.به روز رسانی (jwtb64header+ '.' +JWTB64Payload); // امضا باید به Base64 تبدیل شود تا قابل استفاده باشدامضاء=امضاء.هضم کردن ("Base64"); // البته ما باید رشته Base64 از شخصیت های خاص URL را تمیز کنیمامضاء= cheparescialchars (امضاء); برگشتامضاء> // راز خود را برای امضای نشانه ایجاد کنید محاصره کردنراز= 'super_secret_socience'; محاصره کردنامضاء= ایجاد نشاط(jwtb64header,JWTB64Payload,راز);کنسول.ورود به سیستم ("امضای این است:",امضاء); // خروجی امضای OP-nh-ZTETL6DECMSZYTO-F0JVVS4U7JGUG8ZRYVSWE است 

ما تابعی را تعریف کردیم که با هماهنگی هدر رمزگذاری شده Base64 ، یک دوره و بار دریافت شده از مراحل 1 و 2 در بالا ، یک امضا را ایجاد می کند. سپس با استفاده از یک راز ، عملکرد با استفاده از یک الگوریتم هشدار (Sha256 در این مورد) کد احراز هویت پیام هش (HMAC) ایجاد می کند ، که سپس به یک URL Base64 رمزگذاری می شود و بازگردانده می شود.

مرحله 4: ترکیب نتایج در مراحل 1 ، 2 و 3

// ما اکنون نتایج هدر ، بارگذاری و ثبت نام را با هم ترکیب می کنیم محاصره کردنjsonwebtoken=jwtb64header+ '.' +JWTB64Payload+ '.' +امضاء;کنسول.ورود به سیستم ("JWT است:",jsonwebtoken); // خروجی ها: "JWT است:" eyjhbgcioijiuzi1niisinr5ci6ikpxvcj99 xllbwfpbeb0zxn0lmnvbsisimlzshvtyw4ionrydwv9 

اجرای کد

پرونده index. js را ذخیره کرده و ترمینال خود را باز کرده و موارد زیر را اجرا کنید:

فهرست گره.js 

Terminal tab shows code output, including header, payload, signature and JWT

توصیه ها هنگام کار با نشانه ها

  • اطمینان حاصل کنید که راز مورد استفاده برای امضای نشانه های خود قوی و غیرقابل توصیف است.
  • قبل از دسترسی به بار خود ، امضای یک نشانه را روی سرور تأیید کنید.
  • نشانه های خود را در سمت مشتری رمزگشایی نکنید.
  • نشانه های خود را در فضای محلی ذخیره نکنید زیرا می تواند آنها را در برابر حملات مانند اسکریپت های متقابل سایت (XSS) آسیب پذیر کند.
  • نشانه های خود را فقط در HTTP کوکی ها ذخیره کنید.
  • میزان بار توکن های خود را نسبتاً کوچک نگه دارید ، یعنی نشانه شما نباید بیش از حد مبهم باشد.

نتیجه

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

Chinedu

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

chinedu imoh

Chinedu یک علاقه مندان به فناوری است که روی JavaScript و مهندسی زیرساخت ها متمرکز است.

فارکس به زبان ساده...
ما را در سایت فارکس به زبان ساده دنبال می کنید

برچسب : نویسنده : طاهره ایرانی بازدید : <-PostHit-> تاريخ : شنبه 21 مرداد 1402 ساعت: 15:13