امروز در سلسله مقالات آموزش asp.net core دانشجویار به بررسی آموزش identity در asp.net core جزییات و کاربرد آن پرداخته ایم.

در این مقاله، به آموزش identity در asp.net core پرداخته‌ایم تا با احراز هویت در وب‌سایت به زبان ASP.NET. Core به شکل identity، بتوانید شیوه درست دسترسی کاربر و امنیت سایت را تضمین کنید. گفتنی است بی‌توجهی به این موارد و عدم پیاده سازی درست دسترسی به سطوح متفاوت وب‌سایت، می‌تواند مشکلات بسیاری برای برنامه‌نویسان به وجود آورد.

بررسی اجمالی

یکی از پرتکرارترین وظایف برنامه‌نویسان، تعیین سطح دسترسی کاربران برای استفاده از نرم‌افزارهای مختلف است. در واقع باید پس از نوشتن هر کد مخصوص، این قابلیت هم پیاده‌سازی شود. اگر اشتباهی طی این مرحله صورت گیرد، باعث بروز مشکلات امنیتی و باگ‌های بسیاری خواهد شد.

برای رفع این مشکلات، framework ها به صورت توکار به کمک طراحی این قابلیت آمده‌اند و تا حد زیادی قابل اعتماد هستند. در این میان، identify که یکی از محصولات شرکت مایکروسافت است، برای فرآیندهای Authentication، Authorization و Accounting پروژه‌های Dot Net تهیه شده است.

پیش‌نیازها و مباحث آموزش identify

اگر شما هم به عنوان یک برنامه‌نویس به دنبال یک سیستم احراز هویت برای کابران و… هستید، تا ادامه این مقاله همراه ما باشید. این آموزش دارای پیش‌نیازهای زیر است:

  • ویژوال استودیو 2017
  • SQL Server 2014 یا بالاتر
  • تسلط بر C#
  • آشنایی با net core
  • آشنایی با EntityFramework

مباحث آموزش identity در asp.net core شامل ایجاد کاربران مدیر پیش‌فرض، ایجاد نقش مدیر پیش‌فرض، تغییر مسیر کاربران غیر مجاز به صفحه ورود و نمایش منوی صفحه مدیر فقط برای کاربران مدیر مجاز است.

مرحله ۱: ایجاد پایگاه داده

در قدم اول، یک پایگاه داده تشکیل داده و تنظیمات لینک شدن بین فایل appsettings.json و DefaultConnection  را به وسیله پایگاه داده جدید انجام دهید. کاربرد این پایگاه داده برای ساختن جدول ASP.NET Core Identity است.

اسکریپت زیر را برای ایجاد پایگاه داده اجرا کنید:

USE MASTER
GO

برای بررسی و حذف پایگاه داده تکراری در صورت وجود، عملیات زیر را انجام دهید:

IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'InventoryDB' )
DROP DATABASE InventoryDB
GO
CREATE DATABASE InventoryDB
GO
USE InventoryDB
GO

در این مرحله و پس از اجرای اسکریپت DB، پایگاه داده ایجاد شده است اما هنوز جداول آن تشکیل نشده‌اند.

مرحله ۲: ایجاد ASP.net core

ابتدا Visual Studio 2017 را نصب کرده و سپس روی Start و بعد از آن روی Programs کلیک کنید. در نهایت، Visual Studio 2017 را انتخاب کنید. حالا روی new کلیک کرده و پس از انتخاب project، روی ASP.net Core Web Application کلیک و نام پروژه را انتخاب کنید.

Web Application را در Model-View-Controller انتخاب و روی change Authentication کلیک کنید. پس از انجام این مرحله، Individual User Accounts را انتخاب و بر روی ایجاد پروژه یا create your project کلیک کنید. در فایل apsettings.json، رشته اتصال نام سرور UID، sql و PVD را برای ایجاد تمامی جزئیات در یک پایگاه داده تغییر دهید.

"ConnectionStrings": { 
"DefaultConnection": "Server= YOURSERVERNAME;Database=InventoryDB;user id= YOURSQLUSERID;password=YOURSQLPASSWORD;Trusted_Connection=True;MultipleActiveResultSets=true" 
}, 

مرحله ۳: اضافه کردن Identify Service

در مرحله سوم آموزش identity در asp.net core، اضافه شدن سرویس Identify به فایل startup.cs و متد configureservices به صورت پیش‌فرض انجام می‌شود.

آموزش identity در asp.net core: مرحله ۴: ثبت نام اولین کاربر

تا این مرحله، برنامه ASP.net آماده ثبت نام کاربران و سپس ورود آن‌ها به سیستم شده است. طی مراحل بعدی می‌توانیم مجوزهای لازم را برای نقش‌های متفاوت کاربران صادر کنیم. برای شروع، کاربر پیش‌فرض را به عنوان مدیر ثبت می‌کنیم. به این منظور، باید روی لینک ثبت نام (Register) کلیک کنید.

پس از ثبت نام، صفحه‌ای روی نمایشگر شما ظاهر می‌شود که باید با کلیک روی دکمه apply migration از آن عبور کنید. برای تأیید، Migration Applied را مشاهده و روی try refreshing the page کلیک می‌کنید. با این کار، صفحه آپدیت شده و کاربران جدید که در سایت ثبت نام کرده‌اند مشاهده می‌شوند.

بر خلاف مرحله ۱ که جدول قابل مشاهده نبود، در این قسمت شما می‌توانید تمامی جداول ایجاد شده Identify را ببینید. برای چک کردن جزئیات کاربرانی که به تازگی ثبت نام کرده‌اند، کافی است تا جدول aspNetUsers را مشاهده کنید. اگر هیچ رکوردی مشاهده نکرده‌اید، به این دلیل است که هنوز نقشی تعریف نشده است تا کاربران به آن نقش‌های خاص اضافه شوند.

مرحله ۵: ایجاد نقش جدید کاربران

با استفاده از کدهای زیر، می‌توانید به عنوان admin نقش‌های جدید اضافه کنید و آخرین کاربر را پس از ثبت نام، تحت عنوان Admin به سایت معرفی کنید. ابتدا فایل Startup.cs را باز کنید و متد زیر را پیاده‌سازی کنید:

private async Task CreateUserRoles(IServiceProvider serviceProvider)

{
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
IdentityResult roleResult;
//Adding Addmin Role
var roleCheck = await RoleManager.RoleExistsAsync("Admin");
if (!roleCheck)
{
//create the roles and seed them to the database
roleResult = await RoleManager.CreateAsync(new IdentityRole("Admin"));
}
//Assign Admin role to the main User here we have given our newly loregistered login id for Admin management
ApplicationUser user = await UserManager.FindByEmailAsync("syedshanumcain@gmail.com");
var User = new ApplicationUser();
await UserManager.AddToRoleAsync(user, "Admin");
}

در مرحله پنجم آموزش identity در asp.net core، با کمک فایل Startup.cs، متد بدنه را پیدا می‌کنیم. متد createuserroles را فراخوان کرده و پس از ساخت و اجرای برنامه، نقش ادمین را در جدول ASONetRole مشاهده کنید. همچنین در این مرحله، new role را که به جدول گفته‌شده اضافه شده است، مشاهده می‌کنید. همچنین کاربر پیش‌فرض را می‌بینید که با admin role مشخص شده است.

مرحله ۶: ایجاد صفحه ادمین و تنظیم مجوزها

روی پوشه controller کلیک‌راست کرده و به مسیرadd new controller  و MVC Controller رفته و روی Add  کلیک کنید. در کادر Controller name، نام Admin را وارد و Add کنید. حالا روی index راست‌کلیک کرده و add view را انتخاب کنید. با کلیک روی دکمه add، صفحه جدید ایجاد می‌شود. در اینجا admin controller و admin view را مشاهده می‌کنید که ایجاد شده‌اند. حالا با ایجاد صفحه ادمین و تشکیل منو برای آن، اجازه دسترسی کاربر را به آن نمی‌دهید.

برای تنظیم مجوزهای کاربران، کافی است تا کد زیر را در Admin Controller اضافه کنید:

[Authorize(Roles = "Admin")]
public IActionResult Index()
{
return View();
}

گفتنی است طبق مجوزهایی که پیاده‌سازی شد، تنها نقش Admin می‌تواند وارد صفحه ادمین شود. اگر می‌خواهید به نقش‌های دیگری هم مجوز دهید، از این روش استفاده کنید:

[Authorize(Roles = “Admin,SuperAdmin,Manager”)]

جمع‌بندی آموزش identity در asp.net core

اگر بخواهیم یک جمع‌بندی کوتاه از تمامی مراحل داشته باشیم، باید بگوییم که ابتدا در sql server یک پایگاه داده با نام InventoryDB ایجاد کردیم. سپس برای تغییر رشته اتصال DefaultConnection به SQL Server، به فایل appsettings.json رفتیم و در نهایت، کدهای لازم را به فایل Startup.cs اضافه کردیم. با خواندن مقاله آموزش identity در asp.net core، می‌توانید به راحتی از این مهارت استفاده کرده و سطح امنیت سایت را به میزان قابل توجهی افزایش دهید.