<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mohammad Sadegh Foroughi</title>
        <link>https://virgool.io/feed/@iforoughi</link>
        <description>DevOps, Backend, Frontend; it&#039;s all about me; Oh wait, maybe I have add entrepreneur to the bio.</description>
        <language>fa</language>
        <pubDate>2026-06-07 08:54:37</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/38802/avatar/yPn5Ql.png?height=120&amp;width=120</url>
            <title>Mohammad Sadegh Foroughi</title>
            <link>https://virgool.io/@iforoughi</link>
        </image>

                    <item>
                <title>Just For Fun یا چی؟؟</title>
                <link>https://virgool.io/justforfun/just-for-fun-%DB%8C%D8%A7-%DA%86%DB%8C-hl7naoolxkkm</link>
                <description>Just For Fun جمله موندگاری توی دنیای لینوکس بودتوی ایمیلی که لینوس توروادس میخواسته همکاری خودشو در رابط با توسعه کرنل لینوکس اعلام کنه که از این Subject استفاده میکنه.گربه انتشاراتمونخب بگذریم، امروز که داشتم توی ویرگول پست میخوندم، توجه ام به سمت فیچر &quot;انتشارات ویرگول&quot; جلب شد؛ با خودم گفتم که بیام و یه انتشارات تحت عنوان Just For Fun بسازم، اما محتویات چیه؟‌ خب از رو اسمش معلومه &quot;فان&quot;؛ میخوایم یسری پست بذاریم که احتمالا به درد بقیه بخوره و اندکی باعث بشه ذکات علم‌مونو بجا بیاریم :)دوستان اگه مایلید بیاید باهم و Just For Fun این انتشاراتو بگردونیم، زیر همین پست اعلام حضور کنید!</description>
                <category>Mohammad Sadegh Foroughi</category>
                <author>Mohammad Sadegh Foroughi</author>
                <pubDate>Tue, 10 Sep 2019 17:23:44 +0430</pubDate>
            </item>
                    <item>
                <title>JWT یا JSON Web Token چیست؟؟‌( قسمت دوم )</title>
                <link>https://virgool.io/justforfun/jwt-%DB%8C%D8%A7-json-web-token-%DA%86%DB%8C%D8%B3%D8%AA-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-vfqjixtvs6y6</link>
                <description> سلام و خوشآمد گویی!‌سریع بریم سراغ ادامه پست قبلی یعنی JWT چیست‌؛ این قسمت دوم پست هستش و قسمت سوم رو به اجرای این روش احراز هوییت روی NodeJs و ReactJS اختصاص میدیم.تا اینجای کار با روش های مرسوم احراز هوییت آشنا شدیم. ولی خب سوال پیش میاد که چرا از باید JWT  استفاده کنیم؛ در جواب باید بگم که برای احراز هوییت روی API ها ما متاسفانه و خوشبختانه نمیتونیم از دو روش دیگه یعنی Session Cookie استفاده کنیم . توی سیستم SOAP که دیتا ها با فرمت XML رد و بدل میشن؛ ما میتونیم با گرفتن Username, Password تو هر درخواست؛ احراز هوییت رو انجام بدیم. ولی توی سیستم JWT هم میشه همین کار رو انجام داد ولی یکم دچار پیچیدگی وسردرگمی می شیم ولی خوشبختانه یه مشت گیک نشستن تو آفتاب فکر کردن و رسیدن به فرستادن Username, Password روی هدر درخواست. ولی باز یه مشکلی بود؛‌اگر شما هم به هدر های دیفالت HTTP  آشنا باشید؛‌ به فکر هدر Authorization می افتید؛ پس همون گیکا دیدن نمیشه دوتافیلدو توی این هدر فرستاد پس اومدن توکن و اختراع کردن و اونو توی این هدر فرستادن که اتفاقا خیلی کار برنامه نویسا رو ساده کردن. و اتفاق خوب دوم که احتمالا به یادش افتادید؛‌ استفاده از API  ها برای Application . یعنی فرقی نداره کلاینتمون WebApp, Android, IOS باشه و سیستم احراز هوییتمون به راحتی کار میکنه. نگاهی دقیق به ساختار JWT Header {
  &quot;alg&quot;: &quot;HS256&quot;,
  &quot;typ&quot;: &quot;JWT&quot;
  }alg:  یا همون الگوریتم بهش typ:  یا نوع Tokenراجع به الگوریتمای HASH پیشنهاد میکنم این پست رو یه نگاهی بندازید:  AuthcodeTokerhttps://www.thesslstore.com/blog/difference-sha-1-sha-2-sha-256-hash-algorithms/ Payload{
 &quot;sub&quot;: &quot;1234567890&quot;,
 &quot;name&quot;: &quot;John Doe&quot;,
 &quot;iat&quot;: 1516239022
  }sub, Name: مقادیر دلخوای که میخوایم توی توکن بریزیم iat: که به صورت خودکار تولید میشه(اگه  expire Time ست کنید البته ) مخفف Issued At هستش که به صورت UNIX TIME هستش؛ تاریخ تولد توکن رو دخیره میکنه.SignatureHMACSHA256(
  base64UrlEncode(header) + &quot;.&quot; +
  base64UrlEncode(payload),
  SECRETKEY 
)که معلومه چیکار میکنه؛ Base64 هدر و Payload رو با SecretKey هش میکنه البته طبق الگوریتمی که توی هدر گفتیم. JWT رو سرور چطوری میخونه ؟؟ وقتی کتابخونه JWT رو به پروژتون اضافه میکنید؛ چند تا متد در اختیارتون میذاره که چندتا از متد های این کتابخونه رو با هم مرور میکنیم: sign:‌ کارش اینه که Header و Payload و SecretKey و میگیره و JWT میده verify:‌ توکن و SecretKey رو میگیره و میگه که توکن درست هستش یا نه decode:‌ خوندن اطلاعات توی توکن آیا میدونستید حتی کتابخونه JWT برای کلاینت ها هم وجود داره؟؟‌ولی خب نباید سمت کلاینت احراز هوییت کنیم؛ چون احراز هوییت بی معنی میشه؛ ولی از متد Decode سمت کلاینت میشه برای خوندن اطلاعات توکن استفاده کرد. منتظر قسمت سوم باشید که توی اون قسمت پیاده سازیJWT رو در NodeJS با کتابخونه PassportJS و هندل کردن درخواست ها در ReactJS خواهیم داشت. </description>
                <category>Mohammad Sadegh Foroughi</category>
                <author>Mohammad Sadegh Foroughi</author>
                <pubDate>Thu, 25 Jul 2019 21:54:09 +0430</pubDate>
            </item>
                    <item>
                <title>JWT یا JSON Web Token چیست ؟؟</title>
                <link>https://virgool.io/justforfun/jwt-%DB%8C%D8%A7-json-web-token-%DA%86%DB%8C%D8%B3%D8%AA-bsu4tn9fepib</link>
                <description>JSON Web Tokenسلام به همه برنامه نویسا یا آدمای اهل فن که اومدن تا این مطلب رو بخونن (یکم خوشآمدگوییم یطوری شد)توی این مقاله یا پست یا هرچیزه دیگه، میخوایم راجع به JSON Web Token یا به اختصار JWT صحبت کنیم. خب برای شروع بهتره یکم به عقب تر برگردیم.برای اینکه بتونیم از JWT حرف بزنیم بیاید ببینیم کلا سیستم احراز هوییت چطوری کار میکنه و اصلا چی هست (و طبیعتا این بخشو زود جمعش میکنیم تا از بحث اصلی دور نشیم)What is Authentication??شما فرض کنید ما یه شرکت داریم که اتفاقا کلی پرسنل داره، یه اداره خصوصی که ارباب رجوع هم نداره ( به قول مدیری تو هیولا ، &quot;چراغ خامووش &quot; ) ،‌ پس طبیعتا افراد عادی که جزو پرسنل اداره نیستن نمیتونن برن توی شرکت، مگر اینکه کارت پرسنلی داشته باشن که میزننش به در ورودی و باز میشه. به همین راحتی؛ افراد عضو در یک سایت هم با وارد کردن یوزر و پسوردشون میتونن برن تو سایت. (اگر با این مثال متوجه نشدین همین عنوان انگلیسی بالا رو گوگل کنید) What is Authorization??یکم اسماشون شبیه همن. به اولی احراز هویت میگن و به دومی ،(authorization)  سطح دسترسی میگن. برگردیم به همون مثال بالا: خب تا اینحای کار مردم دو دسته اند:  کسایی که کارت ورود به شرکت رو دارند و کسایی که اون کارت رو ندارن. ولی داستان احراز هوییت به اینجا ختم نمیشه؛ توی همون اداره، اجازه افراد برای ورود به اتاق های شرکت فرق میکنه، مثلا مسئول بخش حسابداری اجازه ورود به اتاق جلسات بخش فنی رو نداره،‌ یعنی این که اون کارته که زده و وارد شرکت شده رو وقتی میزنه که بره تو اتاق جلسات با پیغام &quot; unauthorized &quot; مواجه میشه ولی خب مدیرکل شرکت اجازه دسترسی به همه بخش های شرکت رو داره و حتی میتونه دسترسی بقیه افراد رو هم تغییر بده. ( و اگر باز هم این مفهوم رو خوب متوجه نشدین بهتره گوگلش کنید.) خب حالا میتونیم راجع به سیستم های احراز هوییت حرف بزنیم؛ سیستم های احراز هوییت چند دسته اند:  Cookie Based Authentication Session Cookie Based Authentication Token Based Authentication روش اولی به خاطر ماجرای دزدیده شدن کوکی ها و استفاده آنها به راحتی توسط دزد منسوخ شده. ولی روش دوم و سوم چه فرقی دارن و کدوم بهتره؟؟؟  معمولا برنامه نویسای تازه کار یا به قولی نووب ها دومی رو پیشنهاد میدن چون فکر میکنن جدید تره ولی خب سخت در اشتباهن.ما باید تکنولوژی هامونو خوب بشناسیم و توی جای درست ازشون استفاده کنیم پس یه توضیح ریزی راجع به سیستم Session Cookie میدم. توی این سیستم صفحه ها از سمت سرور به صورت رندر شده میان و مرورگر هم اوناره نشون میده. و صورت کلی درخواست به صورت یک درخواست رندر یک صفحه به صورت استاتیک برای یک یوزر خاص هستش و نهایی برای داینامیک کردنش میان چندتا از درخواستارو با AJAX هندل میکنن تا خیلی هم استاتیک نباشه. معمولا بعد از وارد کردن یوزر و پسورد توسط کاربر، سرور یک رشته طولانی رو به کاربر میده تا در صفحه اش نگه دارد که کوکی می نامیمش و یک رشته دیگر نیز سمت خودش تحت عنوان Session نگه میداره تا اونو توی دیتابیس بریزه و بدونه این کوکی متعلق به کدوم یوزر هستش.  و در هر درخواست به صورت خودکار مرورگر اون کوکی رو به سرور میده تا سرور بهش اجازه مرور کردن صفحات بعدی را داشته باشه و البته سرور بدونه که درخواست کدوم یوزر رو داره برسی میکنه. حالا میرسیم به جای خوب: JSON Web Token چیه حالا JSON Web Token یا JWT (که البته تو خونه توکن هم صداش میکنن)توی دسته بندی بالا جزو توکن هاست و از اسمش معلومه که توی قوانین JSON فعالییت میکنه و در آخر به اسم وب میرسیم. حالا توکن چیه؟ توکن یه رشته طولانی ولی مرتبه دار هستش که در اکثر مواقع کارکتر های تشکیل دهنده اون معنی دار هم هستن و مثلا آیدی یوزر داخل هست (البته داخل کوکی هم میشه اینو گذاشتش) ولی JWT دقیقا چیه؟ JWT یه رشته طولانی هستش ولی این رشته از سه بخش تولید شده که با کارکتر نقطه به هم وصل میشن و یک رشته طولانی رو تشکیل میده که الان اجزاش میریزیم بیرون ۱. Header: هدر وظیفه نگهداری الگوریتم هش رو به عهده میگیره. و همچنین اطلاعاتی راجع به زمان انهدام توکن. ۲.PayLoad: که وظیفه این بخش، ذخیره اطلاعاتیه که ما موقع ساختنش میخوایم توکن مون داشته باشه مثل آیدی یا شماره موبایل یوزر (حواست باشه پسوردشو حتی هش شده نریزی تو توکن ش) و بخش هیجان انگیز توکن۳. Signature: این بخش، هش شده PayLoad با الگوریتمیه که ما تو هدر ذخیره کردیم و البته با Secret ای که توی کدمون استفاده شده. بهتر بخوایم بگیم موقع ساین کردن، ما میایم الگوریتم و تاریخ انقضا رو از تو هدر میخونیم و اطلاعات PayLoad رو باهاش با SecretKey هش میکنیم و با نقطه میچسبونیم به بقیه توکن. ساختار JWTچندتا نکته مهم: توکن تاریخ انقضا داره،‌یعنی بعد از یه مدتی که توی ساین کردنش وارد کردین، میمیره و دیگه نمیتونه شماره از نگهبانان سرسخت سرور عبور بدنPayLoad رو همه میتونن بخونن؛ اگرچه به صورت یه رشته نا خوانا دیده میشه ولی تابعی نوشت که بتونه ای اطلاعات رو بخونه( برای همین گفتم توش پسورد نریزین ) حتی هدر هم قابل خوندنهحواستون باشه که برای احراز هوییت با توکن،‌ نیازی نیست که توکن ها در دیتابیس ذخیره و در هر درخواست از دیتا بیس چک بشن، فقط کافیه الگوریتم با اون SecretKey که در سرور هست مطابقت داشته باشه.خب میدونم الان یکم گنگ شدین، پس با یه مثال یکم بهتر این JWT رو توضیح میدم. کوپن؛ هممون بلیط یا کوپن دیدم، یه تیکه کاغذ که وجودش و مهر یا هلوگرامش یا جرنخوردنش به معنی قابل استفاده بودن اونه؛ شما بلیط رو به مامورش میدین یه نگاه به گوشه موشه هاش میکنه و میگه حله برید تو و یه یکم بالای اون بلیط رو پاره میکنه تا شما دوباره ازش استفاده نکیند؛‌ و نکته قابل تامل اینکه اون مامور بدون اینکه بره و دفترچه خرید بلیط هارو چک بکنه به شما اجزاه دسترسی میده. (یعنی دیگه دیتابیس سره هر درخواست چک نمیشه که این یک مزییت هستش) خب بهتره که بقیه این مقاله یا پست رو به قسمت بعدی منتقل کنیم؛ در پست بعدی به انواع JWT میپردازیم و با یک مفهوم جدید و جذاب روبرو خواهیم بود. http://vrgl.ir/asb0I در آخر هم اینو میگم که این اولین پست من در ویرگول بود و جدیدا تصمیم به نوشتن بلاگ کردم؛ پس خوشحال میشم نظرتون رو راجع به این پست همین زیر کامنت کنید.  </description>
                <category>Mohammad Sadegh Foroughi</category>
                <author>Mohammad Sadegh Foroughi</author>
                <pubDate>Wed, 24 Jul 2019 23:20:56 +0430</pubDate>
            </item>
            </channel>
</rss>