Forwarded from کدهک
از یک فستفود در فاصله ی 10 کیلومتری پیتزا سفارش میدهید. اگر پیتزا از قبل آماده ارسال باشد و پیک هم با سرعت 100 کیلومتر بر ساعت حرکت کند حداقل 6 دقیقه طول میکشد تا پیتزا به دست شما برسد و 12 دقیقه طول میکشد تا فستفود از تحویل باخبر شود.
تاخیر یا Latency : مدت زمانی که طول میکشد داده از نقطه ی A به B برسد Latency گفته میشود. از آنجا که فاصله همیشه وجود دارد تاخیر اجتناب ناپذیز است.
پهنای باند یا Bandwidth: پیک هربار فقط می تواند 5 پیتزا با خود حمل کند. اگر شما 20 پیتزا سفارش دهید باید 4 بار رفت و آمد کند.
در سال 1996 آقای Stuart Cheshire مقاله ای منتشر کرد با عنوان "Its latency stupid" و در آن مشکل شبکه های اینترنتی را Latency دانست و نه پهنای باند. همیشه میشود پهنای باند را افزایش داده اما نمی توان تاخیر زمانی بین دو نقطه را از بین برد.حتی اگر داده با سرعت نور حرکت کند همیشه تاخیر وجود دارد.
مشکل Latency چالش اصلی سرویس های Real-time مانند بازیهای آنلاین است. برای کاهش آن میتوان از سروری که در موقعیت فیزیکی نزدیک تری دارد استفاده کرد.
تاخیر یا Latency : مدت زمانی که طول میکشد داده از نقطه ی A به B برسد Latency گفته میشود. از آنجا که فاصله همیشه وجود دارد تاخیر اجتناب ناپذیز است.
پهنای باند یا Bandwidth: پیک هربار فقط می تواند 5 پیتزا با خود حمل کند. اگر شما 20 پیتزا سفارش دهید باید 4 بار رفت و آمد کند.
در سال 1996 آقای Stuart Cheshire مقاله ای منتشر کرد با عنوان "Its latency stupid" و در آن مشکل شبکه های اینترنتی را Latency دانست و نه پهنای باند. همیشه میشود پهنای باند را افزایش داده اما نمی توان تاخیر زمانی بین دو نقطه را از بین برد.حتی اگر داده با سرعت نور حرکت کند همیشه تاخیر وجود دارد.
مشکل Latency چالش اصلی سرویس های Real-time مانند بازیهای آنلاین است. برای کاهش آن میتوان از سروری که در موقعیت فیزیکی نزدیک تری دارد استفاده کرد.
Forwarded from کدهک
اطلاعات Claims در کوکی نگه داری میشوند و به این ترتیب نیاز نیست برای خواندن آنها به دیتابیس مراجعه کنیم.
این موضوع در UserId و UserName همینطور متد IsInRole که سمت کاربر را چک میکند کار را چک میکند استفاده میشود.
در این ویدیو می خواهیم فیلدهای درون ApplicationUser را به Claims تبدیل کنیم بدون اینکه از جدول Claims در دیتابیس Identity استفاده کنیم.
https://tinyurl.com/cdhk-claims-id
این موضوع در UserId و UserName همینطور متد IsInRole که سمت کاربر را چک میکند کار را چک میکند استفاده میشود.
در این ویدیو می خواهیم فیلدهای درون ApplicationUser را به Claims تبدیل کنیم بدون اینکه از جدول Claims در دیتابیس Identity استفاده کنیم.
https://tinyurl.com/cdhk-claims-id
ابزار watch در دات نت به شما امکان میدهد هنگامی که تغییری در سورس کدهای سی شارپ اعمال می کنید سرور به صورت خودکار ریستارت شود. با کمک watch می توانید به سرعت خروجی را در مرورگر مشاهده کنید.
https://codehaks.com/go/ucv
https://codehaks.com/go/ucv
تخفیف 50 درصدی ویژه عید قربان
به مناسبت عید قربان می توانید همه دوره های آموزشی کدهک را با تخفیف 50 درصد تهیه کنید.
کد تخفیف : qorban
https://codehaks.com/shop
به مناسبت عید قربان می توانید همه دوره های آموزشی کدهک را با تخفیف 50 درصد تهیه کنید.
کد تخفیف : qorban
https://codehaks.com/shop
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
🔈🤑 تخفیف 40% کلیه پکیج های آموزش ویدئویی برنامه نویس - ویژه عید قربان
کد تخفیف: Qurban
تاریخ انقضای کد تخفیف فوق: دوشنبه، 13 مرداد 99، ساعت 12 شب
لازم به ذکر است قیمت پکیج های آموزشی نیز جهت رفاه حال شما عزیزان کاهش یافته است، بدین صورت که پس از اعمال کد تخفیف فوق، قیمت هر یک از پکیج های ASP.NET MVC و ASP.NET Core و Angular 8 مبلغ 90.000 تومان، قیمت پکیج سی شارپ سطح 1 مبلغ 60.000 تومان، و پکیج های آموزش مفاهیم وب مبلغ 30.000 تومان خواهد بود.
همچنین، آموزش های ارائه شده در پکیج های آموزش ASP.NET Core، بدون هیچ تغییری در ASP.NET Core 3.1 نیز قابل استفاده است.
خبر جدید نیز این است که مراحل ضبط پکیج آموزش سی شارپ - سطح 2 نیز به پایان رسیده، و به تدریج پس از اتمام مراحل ویرایش روی سایت در دسترس مخاطبین گرامی قرار خواهد گرفت. بنابراین، از هم اکنون می توانید با استفاده از کد تخفیف فوق نسبت به ثبت نام در پکیج آموزشی فوق نیز اقدام فرمائید.
با تقدیم احترام
#مهدی_کرامتی
#تخفیف
@barnamenevis_net
@barnamenevis_org
کد تخفیف: Qurban
تاریخ انقضای کد تخفیف فوق: دوشنبه، 13 مرداد 99، ساعت 12 شب
لازم به ذکر است قیمت پکیج های آموزشی نیز جهت رفاه حال شما عزیزان کاهش یافته است، بدین صورت که پس از اعمال کد تخفیف فوق، قیمت هر یک از پکیج های ASP.NET MVC و ASP.NET Core و Angular 8 مبلغ 90.000 تومان، قیمت پکیج سی شارپ سطح 1 مبلغ 60.000 تومان، و پکیج های آموزش مفاهیم وب مبلغ 30.000 تومان خواهد بود.
همچنین، آموزش های ارائه شده در پکیج های آموزش ASP.NET Core، بدون هیچ تغییری در ASP.NET Core 3.1 نیز قابل استفاده است.
خبر جدید نیز این است که مراحل ضبط پکیج آموزش سی شارپ - سطح 2 نیز به پایان رسیده، و به تدریج پس از اتمام مراحل ویرایش روی سایت در دسترس مخاطبین گرامی قرار خواهد گرفت. بنابراین، از هم اکنون می توانید با استفاده از کد تخفیف فوق نسبت به ثبت نام در پکیج آموزشی فوق نیز اقدام فرمائید.
با تقدیم احترام
#مهدی_کرامتی
#تخفیف
@barnamenevis_net
@barnamenevis_org
Forwarded from کدهک
در این دوره پیاده سازی یک اپ تک صفحه ای با استفاده از Vue.js و دیتابیس MongoDb در ASP NET Core آموزش داده میشود.
اگر می خواهید خیلی سریع و ساده با ابزاری مثل MongoDb و ASP NET Core Web API و Vuejs آشنا شوید و نحوه پیاده کردن یک اپ تک صفحه ای در محیط وب را فرا بگیرید این دوره مناسب شماست.
https://codehaks.com/go/xfa
اگر می خواهید خیلی سریع و ساده با ابزاری مثل MongoDb و ASP NET Core Web API و Vuejs آشنا شوید و نحوه پیاده کردن یک اپ تک صفحه ای در محیط وب را فرا بگیرید این دوره مناسب شماست.
https://codehaks.com/go/xfa
کنفرانس دات نت درباره میکروسرویس ها و آخرین ابزار و امکاناتی که در محیط دات نت برای پیاده سازی این پترن تهیه شده است تا ساعتی دیگر برگزار میشود.
برای تماشای زنده می توانید به لینک زیر بروید.
https://codehaks.com/go/rok
برای تماشای زنده می توانید به لینک زیر بروید.
https://codehaks.com/go/rok
از کدام ابزار برای مپ کردن استفاده می کنید؟
Anonymous Poll
56%
اتو مپر (AutoMapper)
4%
مپستر (Mapster)
5%
سایر موارد
18%
از Mapper استفاده نمیکنم.
17%
با Mapper آشنایی ندارم.
آموزش AutoMapper در ASP NET Core
اتومپر ابزاری برای مپ کردن (کپی کردن فیلد به فیلد) یک شی به شی دیگر است. این ابزار سالهاست که در بسیاری از پروژه ها استفاده میشود. در این ویدیو به آموزش استفاده از AutoMapper در یک پروژه ASP NET Core می پردازیم.
https://codehaks.com/go/mpz
اتومپر ابزاری برای مپ کردن (کپی کردن فیلد به فیلد) یک شی به شی دیگر است. این ابزار سالهاست که در بسیاری از پروژه ها استفاده میشود. در این ویدیو به آموزش استفاده از AutoMapper در یک پروژه ASP NET Core می پردازیم.
https://codehaks.com/go/mpz
Forwarded from کدهک
نگاهی به Async/Await در پروژه های وب
در این ویدیو به بررسی مکانیزم Threading در ASP NET Core می پردازیم و درباره ConfigureAwait و Synchronization Context صحب می کنیم.
https://codehaks.com/video/107
در این ویدیو به بررسی مکانیزم Threading در ASP NET Core می پردازیم و درباره ConfigureAwait و Synchronization Context صحب می کنیم.
https://codehaks.com/video/107
Forwarded from DotNetZoom (Ali)
🔰 یک نکته پرفرمنسی درباره Logging
🔸استفاده از تامین کننده Console برای Logging در حین ارائه نهایی (Production) به شدت باعث کند شدن و کاهش کارآیی برنامه خواهد شد. بهتر است این تامین کننده را صرفا در محیط Development تنظیم کنید (مانند تصویر)
🔹اگر از WebHost.CreateDefaultBuilder استفاده میکنید، به صورت پیشفرض سه تامین کننده Console و Debug و EventSource ثبت خواهند شد پس لازم است ابتدا آن ها را توسط متد ClearProviders حذف کنید
#PerformanceTuning
_________
@DotNetZoom
🔸استفاده از تامین کننده Console برای Logging در حین ارائه نهایی (Production) به شدت باعث کند شدن و کاهش کارآیی برنامه خواهد شد. بهتر است این تامین کننده را صرفا در محیط Development تنظیم کنید (مانند تصویر)
🔹اگر از WebHost.CreateDefaultBuilder استفاده میکنید، به صورت پیشفرض سه تامین کننده Console و Debug و EventSource ثبت خواهند شد پس لازم است ابتدا آن ها را توسط متد ClearProviders حذف کنید
#PerformanceTuning
_________
@DotNetZoom
آیا برای شروع یادگیری ASP NET Core استفاده از داکیومنتهای مایکروسافت را پیشنهاد می کنید؟
Anonymous Poll
57%
بله
43%
خیر
لوگ کردن رویدادها می تواند در رفع باگها و رهگیری خطاهای برنامه کمک زیادی کند. با استفاده از کتابخانه Serilog می توانید داده های لوگ را به روشهای مختلف نمایش دهید یا در انواه دیتابیس ها ذخیره کنید. در این ویدیو نحوه اضافه کردن Serilog به یک پروژه ASP NET Core و ثبت اطلاعات لوگ در دیتابیس SQL Server آموزش داده میشود.
https://codehaks.com/go/pno
https://codehaks.com/go/pno
به مناسبت عید غدیر تمدید شد...
تخفیف 50 درصدی ویژه عید قربان
به مناسبت عید قربان می توانید همه دوره های آموزشی کدهک را با تخفیف 50 درصد تهیه کنید.
کد تخفیف : qorban
https://codehaks.com/shop
تخفیف 50 درصدی ویژه عید قربان
به مناسبت عید قربان می توانید همه دوره های آموزشی کدهک را با تخفیف 50 درصد تهیه کنید.
کد تخفیف : qorban
https://codehaks.com/shop
در این دوره به آموزش Entity Framework می پردازیم. کار را با یک پروژه کاملا خالی شروع می کنیم و سپس کتابخانه های لازم برای کار با روش Code First در Entity Framework را به آن اضافه می کنیم. گام به گام پیش میرویم تا دیتابیس ایجاد کنیم و اطلاعات را در آن ذخیره کنیم.
https://codehaks.com/go/efk
https://codehaks.com/go/efk
رقابت بسیار نزدیک پرفورمنس gRPC در دات نت 5 در کنار RUST و ++C و Go
آدرس بنچمارک:
https://codehaks.com/go/ykn
آدرس بنچمارک:
https://codehaks.com/go/ykn
در بسیاری از پروژه های وب نیاز به نمایش Select داریم که داده های آن از دیتابیس خوانده میشود. در این ویدیو به نحوه پیاده سازی آن در ASP .NET Core و Razor Page آشنا میشویم.
https://codehaks.com/go/pzo
https://codehaks.com/go/pzo
Forwarded from کدهک
با استفاده از ابزار Health Checks در ASP NET Core می توانید سلامتی اپلیکیشن خود را به دیگر سرویس ها اطلاع دهید. این ابزار امکان میدهد مواردی مانند اتصال به اینترنت، بالا بودن سرور دیتابیس یا دسترسی به سرویس پیامک و ... را چک کنیم و در صورت وجود مشکل به دیگران اطلاع دهیم.
https://codehaks.com/go/tpk
https://codehaks.com/go/tpk
آموزش RabbitMQ و پیاده سازی الگوی Messaging
در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.
https://codehaks.com/go/fpw
در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.
https://codehaks.com/go/fpw
Forwarded from DotNetZoom (Ali)
✅ افزایش امنیت JWT توسط Refresh Token در ASP NET Core
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
___________
@DotNetZoom
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
___________
@DotNetZoom
C-Sharpcorner
Handle Refresh Token Using ASP.NET Core 2.0 And JSON Web Token
In this article , you will learn how to deal with the refresh token when you use jwt (JSON Web Token) as your access_token.