یکی از مواردی که در آموزش authentication در MVC درباره آن صحبت می‌شود، identity است. شاید شما نیز هنگام آموزش authentication در MVC نام‌هایی مثل identity و claim را شنیده باشید. این دو، از مهمترین موارد برای یادگیری authentication هستند و اگر شما نیز می‌خواهید authentication را یاد بگیرید، باید این دو را نیز یاد بگیرید. در این نوشتار قصد داریم درباره idendity صحبت کنیم و ببینیم نحوه اجرای identity در MVC به چه شکل است و چگونه می‌توان آن را اجرا کرد.

آموزش identity در mvc
آموزش identity در mvc

Claim چیست؟

Claim در حقیقت یک روش امنیتی برای دریافت اطلاعات کاربران است. این روش یکی از روش‌های بسیار مهم بوده و امروزه برای authentication از آن استفاده می‌شود. در حقیقت احراز هویت بر پایه claim به ما کمک می‌کند تا اطلاعات مورد نیاز خود درباره کاربر را از او گرفته و امنیت سیستم ما ارتقا یابد.

مراحل زیر توالی آنچه در یک مدل امنیتی مبتنی بر Claim اتفاق می‌افتد را نشان می‌دهد:

گام اول: کاربر اقدام به فرستادن یک درخواست می‌کند. برنامه (RP) یک رمز می‌خواهد.

گام دوم: کاربر اعتبارنامه را به مرجع صادر کننده که برنامه RP به آن اعتماد دارد ارائه می‌دهد.

گام سوم: مرجع صادر کننده پس از احراز هویت اعتبار کاربر، یک رمز امضا شده با claim‌ها صادر می‌کند.

گام چهارم: کاربر رمز را به برنامه RP ارائه می‌دهد. این نرم افزار امضای رمز را تأیید می کند، claimها را استخراج می‌کند و بر اساس claimها، درخواست را می پذیرد یا رد می‌کند.

نکته
مقاله پشنهادی: آموزش claim در MVC

Identity چیست؟

Identity در حقیقت به جای سیستم قدیمی ASP.NET Membership و Simple Membership معرفی شده است و قابلیت‌های زیادی به مانند profile support دارد که این قابلیت‌های جدید می‌تواند کمک زیادی به برنامه نویسان برای نوشتن اپلیکیشن‌های تحت وب آنها کند. همچنین Identity قابلیت کار با سیستم owin را دارد و شامل تمپلیت‌های انتقال پیدا کرده از ویژوال استودیو 2013 است.

OWIN چیست؟

ASP.NET MVC و ASP.NET Core از یک رابط باز وب ( Open Web Interface for .NET (OWIN) ) پشتیبانی می‌کنند. این رابط در حقیقت در بین وب سرور و اپلیکیشن تحت وب قرار می‌گیرد و هدف و ماموریت اصلی آن جدا سازی بین اپلیکیشن‌ها و سرور است. OWIN به شکل یک میان‌افزار نقش ایفا می‌کند.

OWIN رابط بین وب سرور و اپلیکیشن تحت وب
OWIN به عنوان رابط بین وب سرور و اپلیکیشن تحت وب

چگونه در ASP.NET MVC یک identity ایجاد کنیم؟

در این قسمت شروع به ایجاد یک identity کرده و باهم نحوه انجام آن را بررسی می‌کنیم.

گام اول: ایجاد یک پروژه جدید

در قدم اول نیاز است یک پروژه جدید در visual studio ایجاد کنیم. برای این کار لازم است ابتدا نرم افزار را باز کرده و پس از آن یک پروژه جدید C# ایجاد کرده و از منوی ایجادشده نیز ساخت یک Web application ASP.NET را انتخاب می‌کنیم.

ایجاد یک پروژه جدید در visual studio
ایجاد یک پروژه جدید در visual studio

گام دوم: انتخاب یک تمپلیت

در گام دوم نیاز است که یک MVC تمپلیت را از میان تمپلیت‌های موجود انتخاب کنیم و گزینه change authentication را بزنیم.

انتخاب یک MVC تمپلیت
انتخاب یک MVC تمپلیت

گام سوم: انتخای یکی از مدل‌های authentication

در قدم سوم لازم است تا از میان مدل‌های authentication یکی از آنها را انتخاب کنیم که ما در اینجا از individual user account استفاده می‌کنیم و بر روی کلید ok کلیک می‌کنیم.

انتخاب individual user account برای ادامه آموزش identity در mvc
انتخاب individual user account برای ادامه آموزش identity در mvc

گام چهارم

پس از انتخاب نوع احراز هویت، در Controller به پنجره قبلی برگردید و دوباره روی OK کلیک کنید. چند دقیقه طول می‌کشد تا برنامه باز شود و پس از آن، دکمه تأیید را کلیک کنید.

ایجاد identity با استفاده از asp.net به روش‌های ساده
گام چهارم برای ایجاد identity با استفاده از asp.net

گام پنجم

بعد از باز شدن پروژه بر روی startup.cs در درون قسمت solution explore کلیک می‌کنیم و پس از آن می‌توانیم صفحه آغازینی را ببینیم که OWIN Assembly در آن شروع شده است.

صفحه شروع که مونتاژ OWIN از آنجا شروع می شود
صفحه شروع که مونتاژ OWIN از آنجا شروع می‌شود

بر روی ConfigureAuth(app) کلیک راست می‌کنیم و پس از آن به Definition page رفته و در آنجا می‌توانیم auto-generated کدها را ببینیم. این کدهای از پیش آماده به ما کمک می‌کند میزان کد نویسی کمتری را داشته باشیم.

انواع مختلف احراز هویت در OWIN 
انواع مختلف احراز هویت در OWIN

گام ششم

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

پس از کامپایل برنامه
پس از کامپایل برنامه

گام هفتم

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

گام هفتم آموزش Identity : ثبت نام
گام هفتم آموزش Identity : ثبت نام

اما اگر user جدید نیستید و قبلاً مراحل نام نویسی را انجام داده‌اید، می‌توانید با دادن اطلاعات خود در قسمت login وارد برنامه شوید.

وارد شدن

وارد برنامه شوید. اکنون می‌توانید اطلاعات خود را در قسمت بالا سمت راست مشاهده کنید.

مشاهده اطلاعات
مشاهده اطلاعات

گام هشتم

ما می‌توانیم از Identity در هر صفحه‌ای از برنامه استفاده کنیم. برای این کار قصد داریم آن را در یکی از صفحات جدید برنامه فعال کنیم. برای این کار می‌توانیم از میان‌افزار OWIN استفاده کنیم. ما می‌توانیم با ساخت یک کنترلر در قسمت View page و فعال کردن identity با استفاده از attribute های owin این کار را به سادگی انجام دهیم. بعد از اضافه شدن کنترلر کد زیر را به Test کنترلر اضافه می‌کنیم.

1.	using System;  
2.	using System.Collections.Generic;  
3.	using System.Linq;  
4.	using System.Web;  
5.	using System.Web.Mvc;  
6.	  
7.	namespace NewIdentity.Controllers  
8.	{  
9.	    public class TestController : Controller  
10.	    {  
11.	        // GET: Test  
12.	        public ActionResult Identity()  
13.	        {  
14.	            return Content("We are using Identity");  
15.	        }  
16.	        public ActionResult NonIdentiy()  
17.	        {  
18.	            return Content("We are not using Identity");  
19.	        }  
20.	    }  
21.	}  

به دلیل اینکه هیچ attribute مشخصی را برای فعال کردن identity استفاده نکردیم، برنامه در حال اجرا، از ما هیچ احراز هویتی را نمی‌خواهد. برای این منظور باید با استفاده از attribute ها identity را فعال کنیم. اگر این کار را انجام دهیم برنامه، در هر دفعه اطلاعات ورودی را از ما طلب می‌کند. کد ما بعد از فعال کردن identity به شکل زیر می‌شود.

1.	using System;  
2.	using System.Collections.Generic;  
3.	using System.Linq;  
4.	using System.Web;  
5.	using System.Web.Mvc;  
6.	  
7.	namespace NewIdentity.Controllers  
8.	{  
9.	    public class TestController : Controller  
10.	    {  
11.	        // GET: Test  
12.	        /// <summary>  
13.	        /// Identity In Action Result Level  
14.	        /// </summary>  
15.	        /// <returns></returns>  
16.	        [Authorize]  
17.	        public ActionResult Identity()  
18.	        {  
19.	            return Content("We are using Identity");  
20.	        }  
21.	        public ActionResult NonIdentiy()  
22.	        {  
23.	            return Content("We are not using Identity");  
24.	        }  
25.	    }  
26.	}  

در کد بالا ما از athurize استفاده کردیم. با استفاده از آن می‌توان identity را فعال کرد. همچنین این کد، به ما نشان می‌دهد که چگونه می‌توانیم در controller level از identity استفاده کرده و آن را با استفاده از attribute ها فعال کنیم.

کد ما در controller level به شکل زیر است.

using System;   
using System.Collections.Generic;   
using System.Linq;   
using System.Web;   
using System.Web.Mvc;   
     
namespace NewIdentity.Controllers   
{   
/// <summary>   
/// Identity in Contoller Level   
/// </summary>   
/// <returns></returns>   
[Authorize]   
public class TestController : Controller   
{   
// GET: Test   
public ActionResult Identity()   
{   
return Content("We are using Identity");   
}   
public ActionResult NonIdentiy()   
{   
return Content("We are not using Identity");   
}   
}  

اگر شما کد را اجرا کنید، مستقیماً به صفحه لاگین که در درون نرم افزار است منتقل خواهید شد. دلیل آن فعال بودن identity است. بعد از وارد کردن اطلاعات خود به برنامه منتقل خواهید شد. آدرس نهایی آن به شکل زیر است.

آدرس نهایی برای نمایش فعال بودن identity
آدرس نهایی برای نمایش فعال بودن identity

اگر ما نیاز داریم تا identity برای کار به خصوصی اجرا نشود می‌توانیم از کد زیر و AllowAnonymous attribute استفاده کنیم.

1.	namespace NewIdentity.Controllers  
2.	{  
3.	      
4.	    [Authorize]  
5.	    public class TestController : Controller  
6.	    {  
7.	        // GET: Test  
8.	        public ActionResult Identity()  
9.	        {  
10.	            return Content("We are using Identity");  
11.	        }  
12.	        /// <summary>  
13.	        /// Disable identity to particuler action result  
14.	        /// </summary>  
15.	        /// <returns></returns>  
16.	        [AllowAnonymous]  
17.	        public ActionResult NonIdentiy()  
18.	        {  
19.	            return Content("We are not using Identity");  
20.	        }  
21.	    }  
22.	}  

در این آموزش دیدیم که چگونه می‌توانیم از identity استفاده کنیم و روش کار آن در authentication چیست. با استفاده از این قابلیت به سادگی می‌توانیم بسیاری از مشکلات درباره authentication و ورود به سایت را حل کنیم و به سادگی از این قابلیت بسیار قدرتمند MVC استفاده کنیم.

منابع:

https://www.codeguru.com/csharp/.net/net_asp/mvc/securing-asp.net-mvc-applications-with-asp.net-identity.htm

https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/

https://www.c-sharpcorner.com/article/create-identity-in-simple-ways-using-asp-net-mvc-5/