کدهک
1.95K subscribers
1.29K photos
7 videos
1 file
672 links
آموزشگاه تخصصی دات نت

https://codehaks.com

لینکدین :
https://www.linkedin.com/in/codehaks

یوتیوب:
https://www.youtube.com/@codehaksfa

ارتباط با مدیر :
Admin: @codehak
Email: ghods.hakim@hotmail.com
call: 09380146555
Download Telegram
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
Forwarded from کدهک
در این ویدیو یک پروژه ی دمو با دیتابیس RavenDB در ASP Core پیاده می کنیم.

https://tinyurl.com/y5z3ak2n
ارتباط با اکسل در دات نت

در این ویدیو به آموزش نحوه کار با COM Interop در dot NET Core می پردازیم. با استفاده از Component Object Model میتوانید محیط اکسل را از طریق کد سی شارپ کنترل کنید. ورکبوک جدید ایجاد کنید. درون سلولها محتوایی بنویسید و به صورت فایل ذخیره کنید.

https://codehaks.com/go/kve
آشنایی با ZeroMQ

در این ویدیو به معرفی ZeroMQ می پردازیم و نحوه استفاده از آن را در NET Core بررسی می کنیم. برای استفاده از این ابزار باید پکیچ NetMQ را به پروژه دات نت اضافه کنید و سپس می توانید از ZeroMQ برای ارسال پیام بین چند سرویس یا اپلیکیشن استفاده کنید.

https://codehaks.com/go/pju
Forwarded from کدهک
دوره آموزش کار با Collection ها در سی شارپ و ASP NET Core

پخش در یوتوب :

https://kutt.it/rJvT82
Forwarded from DotNetZoom (Ali)
استفاده از پروکسی داخل پروژه های دات نت Framework Full
https://goo.gl/4JbeYW

خب وقتی پروکسی سرور خودتون رو راه انداختین باید کاری کنین که تمام درخواست های وبسایت شما (مثلا درخواست ارسال نوتیفیکشن تلگرام) از طریق پروکسی سرور شما ارسال بشه نه توسط خود وبسایتتون (یعنی Default Proxy پروژه تون رو عوض کنین)

تو NetFramework Full به صورت زیر عمل میکردیم
WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { UseDefaultCredentials = true };

- فیلد BypassOnLocal مشخص میکنه که درخواست های local (محلی) از طریق پروکسی عبور نکنه و مستقیما ارسال بشه.

- توسط خاصیت BypassList و BypassArrayList میشه لیستی از ادرس هایی رو مشخص کرد که برای درخواست اونها اون ها پروکسی استفاده نشه.

- خاصیت UseDefaultCredentials مشخص میکنه که از Credentials پیشفرض استفاده کنه که در حالت عادی یعنی Username و Password جهت احراز هویت پروکسی سرور ارسال نمیشه.

- اگه پروکسی سروو شما دارای Username و Password باشه باید اون رو داخل خاصیت Credentials شی WebProxy ست کنین.

WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { Credentials = new NetworkCredential("username", "password") };

ست کردن مقدار WebRequest.DefaultWebProxy باعث میشه پروکسی پیشفرض پروژه تغییر کنه و از این به بعد تمام درخواست ها (به جز Local به دلیل Bypass در این مثال) از طریق پروکسی ارسال و دریافت بشه.

همچنین مشابه تنظیمات بالا رو میتونین از طریق WebConfig به صورت زیر انجام بدین
<configuration>
<system.net>
<defaultProxy>
<proxy proxyaddress="http://127.0.0.1:9050" bypassonlocal="true" usesystemdefault="true"/>
</defaultProxy>
</system.net>
</configuration>

اما این روش (DefaultProxy) باعث میشه درخواست های کل سیستم از طریق پروکسی ارسال و دریافت بشه
درصورتی که نیاز دارین فقط برای یک درخواست خاص (مثل ارسال نوتیفیکیشن توسط api تلگرام) از پروکسی استفاده کنین و نه تمام درخواست ها
باید به صورت زیر عمل کنین
WebProxy proxy = new WebProxy("http://127.0.0.1:9050",true);
WebRequest request = WebRequest.Create("http://www.contoso.com");
request.Proxy = proxy;


_______________
@DotNetZoom
آموزش MongoDb در ASP.NET Core - قسمت اول

دیتابیس MongoDb از نوع NoSQL است که اطلاعات را صورت اسناد ذخیره می کند. این دیتابیس در سالهای اخیر محبوبیت زیادی پیدا کرده و در بسیاری از پروژه های کوچک و بزرگ مورد استفاده قرار گرفته است. در این مجموعه به آموزش پیاده سازی وب سایت ASP.NET Core روی دیتابیس MongoDb می پردازیم.

https://codehaks.com/go/mng1
Forwarded from کدهک
بهینه سازی GC در دات نت

در سی شارپ پاکسازی حافظه به عهده GC است. در این ویدیو به بررسی اثر منفی استفاده از Large Object Heap در پرفورمنس می پردازیم و سعی می کنیم از آن دوری کنیم.

https://codehaks.com/go/loh
آموزش MongoDb در ASP.NET Core قسمت دوم

در این قسمت به ادامه پیاده سازی پروژه می پردازیم و قابلیت ویرایش و حذف را به آن اضافه می کنیم.

https://codehaks.com/go/mng2
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
آیا در همه پروژه هایی که برنامه نویس ها اینقدر به خودشان زحمت میدن لایه بندی ها و پیاده سازی الگوهایی مثل Unit of Work و Repository و ... میدن و در حین انجامش کلی درگیری های مختلف پیدا می کنند، آیا وجود این همه لایه و دردسرهای تحمیلی حاصله ضرورت داره؟
Final Results
12%
من همیشه، حتی وقتی لازم نیست لایه بندی ها رو اجرا می کنم
32%
مزیت های لایه بندی بیشتر از تحمل دردسرهای اجرایش است.
25%
برنامه نویس ها اکثرا بخاطر خیلی حرفه ای جلوه دادن کارشون این دردسرها رو می پذیرند.
31%
هیچکام، مشاهده نتایج
Forwarded from اِسکیلی Skilly (Kambiz Asadzadeh)
یکی از مشکلاتی که این روز‌ها بسیار دیده می‌شود، این است که چگونه باید قیمت بدیم و چطور با مشتری برخورد کنیم!

برنامه‌نویس حرفه‌ای و واقعی هیچ‌گاه پشت تلفن و با یک جلسه ملاقات هزینه و زمان برای انجام پروژه را مشخص نمی‌کند. بر خلاف انتظاری که مشتری از شما دارد، به هیچ عنوان نباید هزینه‌های زمانی و مالی را بدون تجزیه تحلیل اولیه بیان کنید. چرا که اگر مشتری شما واقعاً مصمم در انجام پروژه‌ای باشد که هدفمند است، در این صورت حتماً از شما انتظار یاری و مشاروهٔ را خواهد داشت.

بنابراین توصیه می‌کنم، شدیداً به این نکته توجه داشته باشید که به هیچ عنوان در ملاقات اولیه و یا حتی در پشت تلفن قیمت و زمان برای پروژهٔ پیشنهادی از طرف مشتری ارائه نکنید. این نشان‌گر این است که شما به اندازهٔ کافی به زمان، مهارت و تخصص خود مطمئن نیستید.

پیشنهاد می‌شود هر پروژه‌ای که به شما پیشنهاد شد، آن رو در یک زمان مناسب بررسی و مواردی که فکر می‌کنید نیاز است مشتری در جریان آن قرار بگیرد را به زبان ساده‌تر به او انتقال دهید.


1️⃣ ابتدا نیاز مشتری را به خوبی درک کنید، در قدم بعدی بررسی زمانی و سپس بررسی روش‌ها و ابزار‌هایی که قرار است در توسعهٔ پروژه مورد استفاده برار بگیرد را برای خودتان مشخص کنید.

2️⃣ مهارت خود را همراه با دانش، اطلاعاتِ تکیه بر تجربیات خود برای پیاده‌سازیِ پروژهٔ پیشنهادی مرور کرده و آن را بر اساس نتیجهٔ حاصل شده ارزیابی کنید.

3️⃣ زمانی را که در طی چند ساعت، روز، هفته و ماه نیاز دارید به طور تقریبی و نزدیک به واقعیت محاسبه کنید. (زمان از نظر مشتری بسیار مهم است، او انتظار دارد در زمانی که شما طی کرده‌اید به نتیجه برسد).

4️⃣ قیمت را به صراحت و جدی برای مشتریِ خود مشخص کنید (مشخص کردن قیمت ترسی ندارد و شما باید واقعیت را بیان کنید) مهم نیست که مشتری چه واکنشی نشان خواهد داد. شما واقعیت را بیان کنید (بیان کردن واقعیت یعنی یک قدم برای تعریف ارزش برنامه‌نویسی به طرف مقابل) تا دیگر فرصتی برای بی ارزش کردن کار شما وجود نداشته باشد.

5️⃣ اگر مشتری با شنیدن هزینهٔ پیشنهادی شما جهت انجام کار شروع به مثال آوردن از برنامه‌نویسانی کرد که متخصص در این حوزه نیستند، مطمئن شوید که او ارزش پروژهٔ خود را به خوبی نمی‌داند. (اگر مشتری شخصیت انتقاد پذیری داشته باشد، می‌توانید او را قانع کنید که کاملاً در اشتباه است) در غیر این صورت نباید در مورد هزینه‌ها اصرار و تأکید داشته باشد، چرا که هزینه‌ها بر اساس نیاز‌ها و معیار های واقعی مطرح می‌شوند.

5️⃣ تخفیف در برنامه‌نویسی در قدم اول معنی ندارد! در همان لحظه که احساس می‌کنید مشتریِ شما بیشتر به فکر هزینه است تا به فکر کیفیت، شک نکنید که در نهایت رضایت دو جانبه‌ای وجود نخواهد داشت! چون این قرارداد یک طرفه و صرفاً بر اساس هزینه‌ها بسته می‌شود.

6️⃣ به مشتری اطمینان خاطر بدهید که پروژهٔ او در بهترین حالت ممکن تولید خواهد شد! اگر بتوانید و اگر مهارت شما در حدی باشد که محصولی مشابه محصولات استاندارد و جهانی بسازید شک نکنید که موفق خواهید شد. تأکید می‌کنم مشتری در قدم اول هیچ کاری با کد‌های شما ندارد و صرفاً منتظر نتیجه‌ای است که باید ببیند و آن را حس و درک کند.

7️⃣ مشاوره را در هر مرحله از توسعهٔ پروژه در نظر بگیرید، سعی کنید نظرات مشتری را در مباحث تجربه‌کاربری گوش بدهید، اما اجازه ندهید در مورد مباحث فنی نظری را ارائه کنند! مگر دلایل قانع کننده و اساسی که در شرایط خاص توسط مشاورین فنی در پروژه‌های بزرگ و اساسی پیشنهاد می‌شود.

8️⃣ در صورتی که در داخل یک تیم کار می‌کنید، تعامل تنها روش ممکن برای موفقیت است! بحث و جدال با هم‌تیمی‌ها هیچ فایده‌ای به جز نا رضایتی نخواهد داشت.

9️⃣ اگر با مشکلاتی مواجه می‌شوید که باعث می‌شود شما کم کاری کنید آن را باید مدیریت کنید! نگذارید مشتری شما احساس کند که هر موقع حوصله داشتید روی پروژهٔ او کار می‌کنید. بنابراین برای حفظ ارزش‌ها و درک برای احترام‌های متقابل حتماً از برنامهٔ زمان‌بندی شده برای مشتری خود ارائه کنید.

0️⃣1️⃣ عقد قرارداد و تفاهم نامه در رابطه با عدم افشای اطلاعات مهم است! اگر می‌خواهید حرفه‌ای باشید و با شما حرفه‌ای رفتار شود همیشه خودتان پیش قدم برای عقد قرارداد‌های تضمین شده برای دو طرف را باشید.

1️⃣1️⃣ سعی کنید پروژه‌ای که واقعاً آن را دوست ندارید را انجام ندهید! برنامه‌نویسی باید همراه با لذت باشد، در غیر این صورت کار بر روی آن بسیار خسته‌کننده خواهد بود که باعث ناراحتی و مشکلات احتمالی خواهد شد؛ بنابراین سعی کنید توسعهٔ پروژه برای شما جذاب و لذت‌ بخش باشد.

2️⃣1️⃣ برنامه‌نویسی شغل بسیار موثر و سطح بالایی در این دوره زمانه است، بنابراین طوری رفتار کنید که در شأن آن هستید و قدر آن را بدانید.

[ @KambizAsadzadeh ]
Forwarded from اِسکیلی Skilly (Kambiz Asadzadeh)
3️⃣1️⃣ سطح معلومات خود رو مدام افزایش دهید، توانایی درک مسائل و حل آن‌ها بسیار مهم است.

4️⃣1️⃣ به‌روز رسانی ابزار‌ها را جدی بگیرید و مدام مستندات مراجع رو مطالعه کنید.

5️⃣1️⃣ زبان‌های برنامه‌نویسی را ابزار‌های موجود در جعبه ابزار خود بدانید و از هر کدام در جای مناسب استفاده کنید.

6️⃣1️⃣ شکرگزار باشید و از تلاش منصرف نشوید، من قبلاً در مقالات و کتاب‌های خود به این موضوع اشاره کرده‌ام، زمانی که خسته شده‌اید و احساس می‌کنید توان ادامه ندارید، در این لحظه شک نکنید، که شما به موفقیت بسیار نزدیک شده‌اید.

#نکته #پند #توصیه #نکات #مشاوره #رایگان #برنامه‌نویس #برنامه‌نویسی #مشتری #اصول

[ @KambizAsadzadeh ]
آشنایی با Git در Visual Studio

در این مجموعه ویدیو ها به معرفی ابزار و قابلیت های Git در Visual Studio می پردازیم و نحوه استفاده از آن را در ASP NET Core بررسی می کنیم.

https://codehaks.com/go/pra
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
❇️ مجموعه آموزش های Microservices در NET Core.

اگر در اینترنت به دنبال آموزش های Microservices گشته باشین متوجه میشین که اکثر مقالات یا به صورت کلی و عمومی هستند (نه مختص دات نت) و یا برای زبان های دیگه اند و در نهایت اونایی هم مختص دات نت باشن به صورت پراکنده در فضای اینترنت پخش شده اند

علاوه بر این، مبحث Microservices دارای موضوعات متعدد و بزرگی هست و نمیشه اون رو با یک یا چند مقاله جسته و گریخته یاد گرفت واسه همین به یک سری آموزش نیاز دارید.
همچنین بعد از یادگیری مفاهیم پایه این مبحث، بهترین چیزی که میتونه شما رو بر روی این موضوع مسلط کنه، بررسی سورس نمونه پروژه های واقعی که بر پایه Microservices و NET Core. نوشته شده اند هست

🔰ریپازیتوری زیر سعی کرده بهترین آموزش های Microservices که مختص NET Core. هستند رو گردآوری کنه و در پایان لیستی از پروژه های سورس باز گیتهاب که با این معماری نوشته شده اند رو جمع آوری کنه

اگر علاقمند به یادگیری Microservices در NET Core. هستید این بهترین منبع رایگانی هست که میتونه به شما کمک کنه

https://github.com/mjebrahimi/Awesome-Microservices-NetCore
__________
@DotNetZoom
Forwarded from کدهک
شروع کار با SignalR Core

در این مجموعه 8 قسمتی و در 30 دقیقه به آموزش برنامه نویسی Real-time در ASP NET Core می پردازیم.



تماشا در یوتیوب :

https://tinyurl.com/cdhks-signalr-core
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
🔈🤑 تخفیف 40% کلیه پکیج های آموزش ویدئویی برنامه نویس - ویژه روز برنامه نویس

کد تخفیف: DevDay1399
تاریخ انقضای کد تخفیف فوق: یکشنبه، 23 شهریور 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 نیز قابل استفاده است.

با تقدیم احترام
#مهدی_کرامتی
#تخفیف
@barnamenevis_net
@barnamenevis_org
آشنایی با xUnit و نحوه پیاده سازی تست واحد در دات نت

https://tinyurl.com/cdhks-xunt
Forwarded from DotNetZoom (Ali)
🔰 #آیا_میدانستید
توی کنسول مروگر میتونین با دستور console.table، آرایه ها و لیست ها تون رو به صورت جدولی نشون بدین؟

var exampleArray = [
"First item in the array",
"I'm the second item in this array",
"Obviously i'm the last item"
];
console.table(exampleArray);

مثال های بیشتر:
https://www.telerik.com/blogs/better-visualization-of-console-data-with-tables
__________
@DotNetZoom
Forwarded from کدهک
منظور از Availability در یک سیستم در دسترس بودن آن است.

در یک سرویس آنلاین عواملی مثل رشد تعداد کاربرها ، ترافیک ناگهانی یا وابستگی به سرویس های بیرونی میتواند تاثیر مستقیم در میزان دسترسی داشته باشد. مثلا اگر برای ثبت نام از سرویس پیامک استفاده می کنید و این سرویس از دسترس خارج شود سرویس شما هم عملا بدون استفاده میشود.

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

تعداد 9 ها یا The Nines اصطلاحی است که جهت نشان دادن درصد دسترسی به یک سیستم استفاده میشود.

برای بدست آوردن تعداد 9 های یک سیستم ابتدا باید با پیاده سازی سیستم مونیتورینگ مناسب میزان Down-Time را اندازه گرفت و با تقسیم آن در بازه زمانی درصد Availability را بدست آورد.

بسته به اینکه چه سرویسی ارائه می کنید میزان دسترسی مورد نیاز تغییر میکند.

سرویس شما به چه میزان Availability نیاز دارد؟
تعداد 9 های سرویس شما چندتاست؟
Forwarded from کدهک
با استفاده از اینترفیس IActionResult میتوان در ASP NET Core نوع بازگشتی اختصاصی ایجاد کرد. در این ویدیو می بنیم که چطور یک کاکشن را به صورت فایل CSV در خروجی اکشن تولید کنیم.

https://codehaks.com/go/dyk