به نام خدا. در این آموزش ویدئویی قصد دارم تمام روش های احراز هویت و تعیین دسترسی یا همان Authorization و Authentication را خدمت شما آموزش بدهم. در این آموزش با ایجاد یک پروژه ی کامل ASP.net Core WebAPI با JWT به بررسی روش های Authorization خواهیم پرداخت.
سرفصل های این آموزش ویدئویی که به صورت رایگان در اختیار شما قرار می گیرد و مدت آن بیش از 2 ساعت است عبارتند از:
1- ایجاد یک پروژه ی ASP.net Core WebAPI کامل با JWT
2- آموزش افزودن Swagger به پروژه
3- آموزش ایجاد Extentionها، نحوه استفاده از فایل تنظیمات و…
4- آموزش روش های مختلف مدیریت دسترسی یا Authorization: روش مبتنی بر نقش یا Role based، روش مبتنی بر دارای(ادعا) یا Claim based، روش مبتنی بر دسترسی یا Permission based و روش مبتنی بر نقش-دسترسی یا Role to Permission base
کدهای این پروژه را می توانید از آدرس زیر دانلود و استفاده کنید:
کدهای این آموزش در آدرس زیر قابل مشاهده و دانلود است
https://github.com/MohammadMoeinFazeli/ASP.NetCore-AllAuthorizationMethods
همچنین برای دانلود ویدئوی زیر نیز می توانید از این لینک استفاده کنید یا روی آیکون سه نقطه در قسمت پایین سمت راست ویدئو کلیک و سپس روی Download کلیک کنید.
امیدوارم این ویدئو برای شما مفید باشد.
اگر سوالی داشتید لطفا آن را در بخش دیدگاه های همین پست مطرح بفرمایید. مجددا اعلام می کنم که کدهای این پروژه از این آدرس به صورت رایگان قابل دانلود و استفاده است
موفق باشید. التماس دعا
سلام.ببخشید میدونم سوالم خیلی ساده است اما نمیدونم باید چکار کنم.
الان من میخوام getalluser را توی api/users نشون بدم اما ما کفتیم باید authorize بشه. خب با استفاده از postman یا swagger این میشه اما بدون اینها چی یعنی چجوری http://localost/api/users/all را داده هاش را ببینیم؟
چند روز دارم جستجو میکنم بدتر گیج شدم راهش چیه؟ بهم فقط بگید هم میرم اون قسمت را جستجو میکنم. تشکر
با سلام. باید token مربوط به احراز هویت را در header درخواست خود (مثلا درخواست http://localost/api/users/all) به سمت سرور ارسال کنید. فیلد مخصوصی در header درخواست ها برای این کار وجود دارد به اسم authorization که باید درون آن token خود را قرار داده و به سمت سرور ارسال کنید. البته باید قبل از توکن مقدار bearer را نیز بنویسید. یعنی فیلد authorization در header تمام درخواست های شما که نیاز به احراز هویت دارند باید برابر bearer token باشد. (به جای token مقدار واقعی توکن را قرار دهید)
اقا عاااااالی بودی،عالی
دمت گرم
سلام ممنونم از آموزش عالیتون من میخاستم policy Ip را بزارم اما چطور در AuthenticationExtention به Ip یوزر دسترسی داشته باشم؟
با سلام و عرض ادب
شما در هرجای برنامه و در هرکلاسی که بخواهید می توانید با inject کردن IHttpContextAccessor در سازنده آن کلاس به تمام Claimها کاربر دسترسی داشته باشید. مثلا در کد زیر بنده پس از inject کردن IHttpContextAccessor کلایم name را دریافت و در یک متغییر محلی ذخیره می کنم:
public class UserService
{
private string userName;
public UserService(HttpContextAccessor httpContextAccessor)
{
userName = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.Name).Value;
}
}
سلام خسته نباشید یه مشکل دارم که خیلی اذیت کرده خواهشا کمک کنید
نوی پروژه من سطح دسترسی ها به صورت پویا هست و تعدادشون خیلی زیاده وقتی توکن را تولید میکنم یه حجم زیادی میشه باید چیکار کنم که سطح دسترسی ها را با توکن ارسال کنم
پروژه ما back با .net Core و front با react
سلام
میخواستم ببینم وقتی یک کاربر لاگین کرد و یک توکن گرفت. اگر سطح درسترسیش (permission) تغییر کرد. باید چیکار کنیم؟آیا استفاده از JWT این موضوع را ساپورت میکنه؟
با سلام. باید مجددا توکن جدیدی برای کاربر ایجاد کرد، چون اگر پرمیشن ها تغییر بکنند و توکن جدید به کاربر داده نشود، فقط به همون پرمیشن های قبلی دسترسی دارد…. در اینگونه موارد از یک سرویس برای ایجاد مجدد توکن و ارسال به سمت کاربر (مثلا front end) استفاده میشود
سلام و خسته نباشید توضیحات خیلی خوب و جامعه بود لذت بردم که اول تصمیم دارم مثل شما یک پروژه استاتیک درست کنم وقتی کامل شد میبرم دانامیک میکنم و لینک پست شما رو داخل گروه گذاشتم که ادرس کانال این هستش https://t.me/DotNetZoom و داخل گروه قرار دادم و نظر سنجی هم قرار دادم خودم لذت بردم امیدوارم حسابی کار خیلی ها را بندازه و خدا خیرت بده بابت این آموزشی
سلام و خسته نباشید بابت آموزشی خوبی تون تشکر میکنم. من با آموزشی شما پیش رفتم و یک نمونه سورس ایجاد کردم ولی دونه دونه پیش میرفتم و تست میگیرفتم همه اش خطا unauthorized میده تا آخرا فیلم شما تصمیم گرفتم دیدم همه اش خطا unauthorized میده ولی شما با core 2.2 API انجام دادید من با Core 3.1.6 انجام دادم Web API Core رو.
http://s12.picofile.com/file/8400878626/Auth_JWT.7z.html
این لینک دانلود هستش امکانش هستش مشاهده کنید و بگید مشکل از چی هستش ممنون میشم.
و اینکه بخوام با دیتابیس ارتباط بیدم token باید هر دقیقه توکن رو عوض کنم یا چی چون برای ورود میخوام از نام کاربری و رمز عبور استفاده کنم به همراه رمز یکبار مصرف که پیامک میشه ولی موقع ورود توکن ایجاد میشه داخل دیتابیس و اون توکن باید برگرده و وارد سیستم بشه برای ورود یا نه این رو نتونستم حظم کنم. برای ورود.
سلام و خسته نباشید بنده سورس شما رو به Core 3.1.6 بردم و تغییراتی روی Swagger بود اونها رو اعمال کردم و این لینک Core 3.1.6 فایل هستش http://s12.picofile.com/file/8401094100/JWT_Core3_1.zip.html میخواستم بدانم اگر برای شما مقدور باشه امکان تبدیل فایل استاتیک به داینامیک هستش که به جای اینکه از Swagger استفاده بشه از فرم لاگین استفاده بشه و وقتی وارد شد اطلاعات مشاهده کنه اگر دسترسی داشت دسترسی نداشت بزنه شما دسترسی ندارید یا دسترسی دارید ولی حق دیدن ندارید. اگر به این سورس برای شما مقدور بود در بیارید عالی میشه ولی باز یک دنیا ممنون بابت کمکتان.
Good article! We are linking to this particularly great content on our website.
Keep up the great writing.
Here is my web page: Royal CBD
سلام در سورس شما بدلیل اینکه دیتا بصورت هارد کد هست توکن expire نمیشه؟
من سورس کد شمارو ران کردم و از پروژه دیگه دارم ازش دیتا میگیرم ، تایم توکن رو روی 20 ثانیه هم گذاشتم اصلا تفاوتی نداشت
سلام و عرض ادب. با تشکر از محتوای آموزشی که تهیه و در اختیار گذاشتید. فرض کنیم من یک پروژه ASP Net Core Web APP ایجاد کرده باشم و حالا می خواهم با اضافه کردن صفات login و غیره به آن مبحث Authentication و Authorization را در پروژه اضافه کنم. بدون اینکه بخواهم از swagger استفاده کنم، چگونه می توانم مواردی که شما در فیلم توضیح داده اید را پیاده کنم. لطفا راهنمایی بفرمائید.
سلام این آموزش برای Web API هست نه Web App… برای Web App باید در اینترنت جستجو کنید چون بنده آموزشی در این مورد آماده ندارم
سلام، وقت بخیر
امکانش هست با استفاده از این روش بررسی کنیم که یک permission خاص داشته باشه و یا یک roleخاص؟
سلام بله با استفاده از IHttpContextAccessor می تونید این کار رو انجام بدهید. مثلا:
public class ُSomeService
{
private readonly IHttpContextAccessor _httpContextAccessor;
public SomeService(IHttpContextAccessor httpContextAccessor) {
_httpContextAccessor = httpContextAccessor;
}
public void SomeFunction()
();
{
if(_httpContextAccessor.HttpContext.User.FindAll(Permissions.Permission).Any(p => p.Value == Permissions.User.Add))
{
/// Do somting
}
}
}
البته دقت کنید که باید IHttpContextAccessor را به صورت سرویس نیز به startup اضافه کرد:
services.TryAddSingleton
خیلی ممنون از این دورهی جامع و کاربردی! وافعا لطف کردید.
ممنون میشم اگر در مورد معماری تمیز هم صحبت کنید و براش ویدیو درست کنید چون روش تدریس شما وافعا شیوا هست
سلام ممنونم از اموزشتون. اگه احراز هویت توسط یه سرور غیر از سرور api انجام بشه چیکار باید کرد؟
سلام، در این شرایط باید ملاحظات بیشتری رو در نظر گرفت که خارج از بحث این آموزش هست… مهم ترین ملاحظه نحوه ی تعامل با سرور بیرونی هست…. این موارد عموما طبق قراردادها و استانداردهایی انجام میشه که می تونه از پروژه ای تا پروژه ی دیگر متفاوت باشه
خیلی جامع و کامل و عالی بود خسته نباشید
سلام و وقت بخیر
بسیار عالی بود
با آروزی موفقیت روز افزون
سلام و عرض ارادت بابت آموزش خوب شما
یک سوال خیلی مهم دارم در مورد این بحث البته بنده اطلاعات درستی ندارم
برای بحث لاگین و مدیریت کاربران بین asp core و react همین آموزش شما جواب گو است یا باید در پروژه واقعی Swagger حذف شود من تو این زمینه تجربه قبلی ندارم آیا کد شما در نهایت جنب تست دارد یا برای یک پروژه واقعی میشه استفاده کرد؟
سلام و عرض ادب
در مورد بحث احراز هویت باید متناسب با نیاز پروژه پیاده سازی شود. Swagger نیز باید به نحوی تنظیم شود که فقط در زمان توسعه صفحات آن قابل رویت باشد و بعد از build کردن پروژه باید مخفی باشد. برای این کار کافی است middleware مربوط به آن را فقط برای development environment به middleware pipeline با یک دستور ساده ی شرطی if اضافه کنید
سلام ، لطفا درمورد هاست این پروژه روی سرور هم اموزش بگذارید و یا قرار دادن یک پروژه Mvc core و یک پروژه Web API و استفاده پروژه Mvc core از API