آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی و هویت سنجی با OAuth2 در MVC

آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی و هویت سنجی با OAuth2 در MVC

این آموزش نحوه ی ساخت یک اپلیکیشن تحت وب مبتنی بر ASP.NET MVC 5 که به کاربران عضو خود امکان می دهد با استفاده از پروتکل هویت سنجی OAuth2.0 و اطلاعات احرازهویت (نام کاربری و گذرواژه) کاربر از عضویت در سایت های دیگر نظیر Facebook برای مجوزدهی ورود کاربر به سایت بهره می گیرد، را به صورت کاملا کاربردی به شما آموزش می دهیم. به منظور سادگی در توضیح مطالب و پیاده سازی قابلیت مزبور، از اطلاعات احرازهویت عضویت کاربر در سایت های Facebook و Google استفاده می کنیم.
پیاده سازی امکان استفاده از اطلاعات احراز هویت سایت های دیگر و پروتکل OAuth2.0 جهت هویت سنجی کاربر یک مزیت بسیار بزرگ محسوب می شود چراکه امروزه اکثر کاربران قبلا در سایت های مزبور ثبت نام کرده و این سایت ها می توانند اطلاعات آن ها را جهت اعتبارسنجی در اختیار شما قرار دهند. همچنین این امر احتمال بازدید و عضویت در سایت شما را بالا می برد زیرا اگر کاربر مجبور نباشد که برای استفاده از اپلیکیشن تحت وب شما مجددا حساب کاربری ایجاد کرده و اطلاعات مورد نیاز آن را بیاد بیاورد، بسیار برای بازدید از سایت شما راغب تر خواهد بود.
در ادامه ی آموزش جاری، نحوه ی اضافه کردن اطلاعات جزئی کاربر (profile data) و استفاده از توابع کتابخانه ای Membership API جهت افزودن نقش های کاربری (role) را برای شما تشریح خواهیم کرد.


شروع به کار

پروسه را با نصب و اجرا Visual Studio Express 2013 for Web یا Visual Studio 2013 آغاز کنید.
آپدیت 3 محیط کاری Visual Studio یا بالاتر را نصب نمایید.


نکته:

لازم است آپدیت 3 محیط کاری Visual Studio یا بالاتر را جهت استفاده از پروتکل هویت سنجی Google OAuth 2 و اشکال زدایی اپلیکیشن به صورت محلی (local) و بدون هشدارهای SSL نصب نمایید.


جهت ساخت پروژه ی جدید، بر روی گزینه ی New Project از صفحه ی Start کلیک نمایید (یا پس از مراجعه به منو، گزینه ی File را انتخاب کرده و سپس بر روی New Project کلیک کنید).


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

ساخت اولین اپلیکیشن تحت وب خود

برای این منظور پس از کلیک بر روی New Project و انتخاب Visual C# در سمت چپ محیط، بر روی گزینه ی Web و نهایتا ASP.NET Web Application کلیک نمایید.پروژه ی خود را "MvcAuth" نام گذاری کرده و سپس بر روی OK کلیک نمایید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

در کادر محاوره ای New ASP.NET Project، قالب آماده ی MVC را انتخاب نمایید. اگر احزارهویت یا Authentication از نوع Individual User Accounts نیست، بر روی دکمه ی Change Authentication کلیک کرده و Individual User Accounts را انتخاب نمایید. با کلیک بر روی چک باکس Host in the cloud، می توانید به راحتی اپلیکیشن را در محیط Azure میزبانی کرده و در دسترس کاربران قرار دهید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

اگر گزینه ی Host in the cloud را انتخاب کرده باشید، در آن صورت بایستی کادر محاوری مربوط به تنظیمات Microsoft Azure را انجام دهید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

استفاده از مدیریت کننده ی پکیج های NuGet جهت بروز رسانی به میان افزار OWIN

با استفاده از مدیریت کننده ی کتابخانه های NuGet، میان افزار OWIN را بروز رسانی نمایید. بر روی گزینه ی Updates در کادر سمت چپ پنجره ی NuGet Packages کلیک کنید. می توانید با کلیک بر روی دکمه ی Update All تمامی پکیج ها و کتابخانه ها را بروز رسانی کنید یا برای دسترسی به پکیج های OWIN در کادر جستجوی بالای پنجره، سمت راست، اسم پکیج OWIN را وارد کنید:


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

در تصویر زیر، تنها پکیج های OWIN به صورت زیر به نمایش در می آیند:


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

در PMC (کنسول مدیریت پکیج ها)، می توانید دستور Update-Package را درج نموده و تمامی پکیج های مربوطه را به این صورت بروز رسانی کنید.
با فشردن کلید F5 یا Ctrl+F5 اپلیکیشن را اجرا نمایید. همان طور که در تصویر زیر مشاهده می کنید، شماره ی پورت 1234 می باشد. زمانی که شما اپلیکیشن اختصاصی خود را بر روی کامپیوتر شخصی اجرا می کنید، شماره پورت متفاوت خواهد بود.
ممکن است با توجه به اندازه ی پنجره ی مرورگر، مجبور باشید برای مشاهده ی لینک های Home، About، Contact، Register و Log in بر روی آیکون پیمایش کلیک نمایید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

تنظیم و راه اندازی SSL در پروژه

جهت برقراری اتصال با فراهم کننده ی اطلاعات احراز هویت کاربری نظیر Google، Facebook و غیره ... لازم است IIS-Express را راه اندازی کرده و از SSL استفاده نمایید. توجه داشته باشید که پس از ثبت ورود (login) نیز از پروتکل SSL استفاده کرده و مجددا به پروتکل HTTP برنرگردید، چرا که کوکی login (متغیر حاوی اطلاعات احراز هویت) شما به اندازه ی نام کاربری و گذرواژه حائز اهمیت بوده و بدون استفاده از SSL، شما در واقع اطلاعات محرمانه ی احراز هویت خود را در قالب متن خوانا از طریق اینترنت ارسال می کنید. علاوه بر آن، شما بیشتر زحمت را کشیده و با انجام عملیات مزبور یک کانال ارتباطی امن را (که دلیل کندتر بودن HTTPS از HTTP می باشد)، قبل از اینکه پل ارتباطی (pipeline) MVC راه اندازی شود، فراهم کرده اید. با این تفاسیر بازگشت دادن (redirect) درخواست ها به HTTP پس از اینکه ثبت ورود (login) انجام گرفته، نه تنها درخواست جاری، بلکه درخواست های آتی را نیز چندان سریع تر نمی کند.


  1. در کادر Solution Explorer، بر روی پروژه ی MvcAuth کلیک نمایید.
  2. کلید F4 را فشار داده تا property ها و ویژگی های پروژه نمایش داده شوند. در صورت تمایل، می توانید از منوی View، Properties Window را انتخاب نمایید.
  3. ویژگی SSL Enabled را بر روی مقدار True تنظیم کنید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  4. آدرس SSL URL را کپی نمایید (که طبیعتا https://localhost:44300/ خواهد بود مگر اینکه قبلا پروژه های SSL دیگری ایجاد کرده باشید).
  5. در کادر Solution Explorer، بر روی پروژه ی MvcAuthراست کلیک کرده و Properties را انتخاب نمایید.
  6. بر روی تب Web کلیک کرده، سپس آدرس SSL URL را در کادر Project Url جایگذاری نمایید. فایل مورد نظر را با گرفتن کلیدهای Ctl+S ذخیره نمایید. شما برای تنظیم اپلیکیشن های احرازهویت (auth app) Facebook و Google به این Url احتیاج خواهید داشت.آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  7. حال attribute ای به نام RequireHttps را به محتوای کلاس HomeController اضافه نمایید تا بدین وسیله تمامی درخواست ها از پروتکل HTTPS استفاده کنند. روش امن تری نیز وجود دارد که طی آن شما فیلتر RequireHttps را به اپلیکیشن اضافه می کنید. بخشی از کلاس HomeController در زیر به نمایش گذاشته شده است.
    [RequireHttps]
    public class HomeController : Controller
    {
       public ActionResult Index()
       {
          return View();
       }
    
  8. جهت اجرای اپلیکیشن کلیدهای CTRL+F5 را فشار دهید. دستورات زیر را جهت اعتماد و استفاده از self-signed certificate (یک گواهی دیجیتال که با کلید خصوصی/private key خود امضا شده است) که خود سرویس IIS Express تولید کرده است، طی نمایید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  9. محتوای کادر محاوره ای که هشدار امنیتی (Security Warning) را نمایش می دهد، خوانده و اگر می خواهید گواهی (certificate) که نشانگر localhost یا سرور جاری می باشد را نصب کنید، بر روی دکمه ی Yes کلیک نمایید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  10. مرورگر IE صفحه ی Home را نشان داده و به همین خاطر هیچ هشدار SSL ای نمایش داده نمی شود. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  11. مرورگر Google Chrome نیز گواهی را پذیرفته و محتوای HTTPS را بدون صدور و نمایش هشدار امنیتی، برای کاربر نشان می دهد. مرورگر Firefox از certificate store اختصاصی خود استفاده کرده و به همین دلیل یک هشدار امنیتی به نمایش می گذارد. در پروژه ی حاضر، شما می توانید با کلیک روی دکمه ی I Understand the Risks هشدار را رد و محتوای HTTPS را مشاهده کنید.
آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

ایجاد یک اپلیکیشن Google برای OAuth 2 و متصل کردن اپلیکیشن به پروژه

  1. ابتدا به کنسول توسعه دهندگان گوگل یا (https://console.developers.google.com/) Google Developers Console مراجعه نمایید.
  2. چنانچه قبلا پروژه ای ایجاد نکرده اید، از تب سمت چپ Credentials را انتخاب کنید و سپس گزینه ی Create را گزینش نمایید.
  3. در تب سمت چپ، بر روی Credentials کلیک نمایید.
  4. حال این مسیر را طی نمایید: Create Credentials > OAuth client ID.
    • در کادر محاوره ای Create Client ID، در بخش application type گزینه ی Web application را درج نمایید.
    • مقدار Authorized JavaScript را بر روی SSL URL که در بالا استفاده کردید، تنظیم کنید (منظور آدرس https://localhost:44300/ می باشد مگر اینکه قبلا دیگر پروژه های SSL ایجاد کرده باشید)
    • مقدار گزینه ی Authorized redirect URI را بر روی https://localhost:44300/signin-google/ تنظیم نمایید.
  5. بر روی آیتم منوی صفحه ی OAuth Consent کلیک نمایید و سپس آدرس ایمیل و اسم محصول خود را تنظیم نمایید. پس از تکمیل فرم، بر روی Save کلیک نمایید.
  6. بر روی آیتم منو Library کلیک کرده، واژه ی Google+ API را سرچ نمایید. سپس بر روی آن کلیک کرده و Enable را کلیک کنید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  7. تصویر زیر توابع کتابخانه ای و API های فعال سازی شده را نمایش می دهد. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  8. از API Manager توابع کتابخانه ای Google APIs، به تب Credentials جهت دسترسی به Client ID مراجعه نمایید. به منظور ذخیره ی یک فایل با فرمت JSON به همراه اطلاعات محرمانه ی اپلیکیشن (App secrets) Download را کلیک نمایید. ClientId و ClientSecret را کپی کرده و در متد UseGoogleAuthentication موجود در فایل Startup.Auth.cs داخل پوشه ی App_Start جایگذاری نمایید. مقادیر ClientId و ClientSecret که در زیر نمایش داده شده اند، صرفا نمونه های آزمایشی هستند و کار نمی کنند.
    public void ConfigureAuth(IAppBuilder app)
    {
        // Configure the db context and user manager to use a single instance per request
        app.CreatePerOwinContext(ApplicationDbContext.Create);
        app.CreatePerOwinContext(ApplicationUserManager.Create);
        // Enable the application to use a cookie to store information for the signed in user
        // and to use a cookie to temporarily store information about a user logging in with a third party login provider
        // Configure the sign in cookie
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            }
        });
        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
        // Uncomment the following lines to enable logging in with third party login providers
        //app.UseMicrosoftAccountAuthentication(
        //    clientId: "",
        //    clientSecret: "");
        //app.UseTwitterAuthentication(
        //   consumerKey: "",
        //   consumerSecret: "");
        //app.UseFacebookAuthentication(
        //   appId: "",
        //   appSecret: "");
        app.UseGoogleAuthentication(
             clientId: "000-000.apps.googleusercontent.com",
             clientSecret: "00000000000");
    }
    
    توجه:

    هیچگاه داده های حساس و محرمانه را در کد برنامه ی خود (source code) نگه ندارید. در پروژه ی حاضر، حساب کاربری (account) و اطلاعات احرازهویت (credentials) به دلیل ساده نگه داشتن نمونه برنامه، به کد اپلیکیشن اضافه شده اند.

  9. کلیدهای CTRL+F5 را جهت کامپایل و اجرای اپلیکیشن فشار دهید. حال بر روی لینک Log in کلیک نمایید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  10. در زیر Use another service to log in، بر روی دکمه ی Google کلیک نمایید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
    توجه:

    در صورت عدم انجام هر یک از مراحل فوق، یک خطای HTTP 401 صادر می شود. برای برطرف کردن خطا، مراحل فوق را دقیق دنبال نموده و از اجرای تمامی آن ها اطمینان حاصل کنید. اگر یکی از تنظیمات الزامی (مانند مقداردهی product name) را به درستی انجام نداده اید، کافی است آیتم مورد نظر را اضافه نموده و تغییرات را ذخیره نمایید. ممکن است فرایند احراز هویت (Authentication) برای عملکرد صحیح چند دقیقه ای طول بکشد.

  11. شما به صفحه ی sign in سایت گوگل هدایت شده (redirect) و در آنجا می توانید اطلاعات تصدیق هویت خود (credentials) را در فیلدهای مربوطه وارد نمایید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  12. پس از وارد کردن اطلاعات تصدیق هویت خود (credentials)، از شما درخواست می شود که به اپلیکیشن تحت وبی که اخیرا پیاده سازی کردید، مجوزهای لازم داده شود. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  13. بر روی Accept کلیک کنید. مرورگر شما را به صفحه ی ثبت نام (Register) از اپلیکیشن MvcAuth هدایت (redirect) می کند. در آن صفحه می توانید حساب کاربری گوگل خود را به صورت رسمی ثبت و معرفی نمایید. شما این امکان را دارید که اسم ثبت نام ایمل محلی (local email registration name) که برای حساب کاربری Gmail شما استفاده می شود را تغییر دهید. با این حال توصیه می شود نام مستعار پیش فرض ایمیل را که برای احرازهویت کاربر استفاده می شود به همین حالت نگه داشته و آن را ویرایش نکنید. اکنون بر روی Register کلیک نمایید.
آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

ایجاد یک اپلیکیشن در Facebook و متصل کردن اپلکیشن به پروژه

برای پیاده سازی و استفاده از قابلیت احرازهویت Facebook OAuth2، بایستی تعدادی از تنظیمات را از اپلیکیشنی که در Facebook ایجاد کردید، در پروژه ی خود جایگذاری نمایید.


  1. در پنجره ی مرورگر، آدرس https://developers.facebook.com/apps را در نوار آدرس وارد کرده و با درج اطلاعات احرازهویت Facebookخود، وارد سایت (login) شوید.
  2. اگر قبلا تحت عنوان یک توسعه دهنده ی Facebook ثبت نام نکرده اید، بر روی Register as a Developer کلیک کرده و دستورالعمل های ارائه شده را جهت ثبت نام و رجیستر دنبال نمایید.
  3. در تب Apps، بر روی گزینه ی Create New App کلیک نمایید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  4. اسم اپلیکیشن (App name) و رده ی مربوطه (Category) را در فیلدهای متناظر مشخص کرده و گزینه ی Create App را کلیک نمایید.

    این مقادیر باید در سرتاسر Facebook منحصربفرد باشد. App Namespace بخشی از URL است که اپلیکیشن شما با استفاده از آن به اپلیکیشن Facebook جهت دریافت اطلاعات احراز هویت دسترسی پیدا می کند (برای مثال https://apps.facebook.com/{App Namespace}). اگر شما مقدار App Namespace را مشخص نکنید، App ID جای مقدار نام برده در URL استفاده می شود. App ID یک عدد طولانی است که سیستم آن را تولید کرده و آن را بخش بعدی خواهید دید.


    آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  5. فرم استاندارد بررسی و تضمین امنیت (Security check) را با فشردن دکمه ی Submit ارسال نمایید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  6. از نوار منوی سمت چپ (Developers)، آیتم Settings را انتخاب نمایید.
  7. در بخش تنظیمات Basic از صفحه ی حاضر، بر روی آیکون Add Platform کلیک کرده و مشخص نمایید که می خواهید یک اپلیکیشن تحت وب معرفی (website app) و اضافه شود. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  8. از گزینه های platform و بسترهای اجرا، Website را انتخاب نمایید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
  9. حتما مقادیر App ID و App Secret را ذخیره کرده یا یادداشت نمایید چرا که بعدا در آموزش حاضر باید هر دو مقدار مذکور را در اپلیکیشن مبتنی بر MVC خود وارد نمایید. همچنین لازم است، Site URL یا آدرس اینترنتی (https://localhost:44300/) را جهت تست اپلیکیشن MVC خود ارائه کنید. پس از افزودن یک Contact Email، دکمه ی Save Changes را جهت ذخیره و اعمال نهایی تغییرات فشار دهید. آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی
    نکته:

    لازم است به خاطر داشته باشید که هم اکنون شما منحصرا با ارائه ی اسم مستعار ایمیل (email alias) که ثبت و معرفی کردید، می توانید عملیات احراز هویت (authenticate) را با موفقیت انجام دهید. سایر کاربران و حساب های کاربری آزمایشی، قادر به ثبت نام و register نخواهند بود. شما می توانید از طریق تب Developer Roles سایت Facebook، به سایر حساب های کاربری و اکانت های Facebook مجوز دسترسی اعطا نمایید.


  10. در محیط کاری Visual Studio، فایل App_Start\Startup.Auth.cs را باز کنید.
  11. مقادیر AppId و App Secret را کپی کرده و در پرانتز پارامترهای متد UseFacebookAuthentication جایگذاری نمایید. مقادیر AppId و App Secret که در زیر نمایش داده شده اند، صرفا نمونه های آزمایشی هستند که کار نمی کنند.
    public void ConfigureAuth(IAppBuilder app)
    {
        // Configure the db context and user manager to use a single instance per request
        app.CreatePerOwinContext(ApplicationDbContext.Create);
        app.CreatePerOwinContext(ApplicationUserManager.Create);
        // Enable the application to use a cookie to store information for the signed in user
        // and to use a cookie to temporarily store information about a user logging in with a third party login provider
        // Configure the sign in cookie
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            }
        });
        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
        // Uncomment the following lines to enable logging in with third party login providers
        //app.UseMicrosoftAccountAuthentication(
        //    clientId: "",
        //    clientSecret: "");
        //app.UseTwitterAuthentication(
        //   consumerKey: "",
        //   consumerSecret: "");
        app.UseFacebookAuthentication(
           appId: "000000000000000",
           appSecret: "000000000000000");
        app.UseGoogleAuthentication(
             clientId: "000000000000000.apps.googleusercontent.com",
             clientSecret: "000000000000000");
    }
    
  12. گزینه ی Save Changes را کلیک نمایید.
  13. با فشردن کلیدهای CTRL+F5 اپلیکیشن را اجرا نمایید.

با انتخاب Log in صفحه ی Login را در مرورگر باز نمایید. بر روی Facebook در زیر Use another service to log in کلیک نمایید.
اطلاعات احراز هویت (credentials) Facebook خود را وارد نمایید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

از شما درخواست می شود که اجازه ی دسترسی اپلیکیشن به پروفایل عمومی (public profile) و لیست دوستان (friend list) خود را اعطا نمایید.

آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

اکنون شما وارد اپلیکیشن (login) شده اید. می توانید این حساب کاربری را به اپلیکیشن خود معرفی (register) کنید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

زمانی که ثبت نام را انجام می دهید (register می کنید)، یک آیتم جدید به جدول Users از دیتابیس membership اضافه می شود.


بررسی داده های مربوط به کاربران عضو سایت (Membership Data)

در منوی View، بر روی Server Explorer کلیک نمایید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

ابتدا گره DefaultConnection (MvcAuth) را باز کرده، سپس بر روی گره Tablesکلیک نمایید. در گام بعدی بر روی AspNetUsers راست کلیک نموده و گزینه ی Show Table Data را انتخاب نمایید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

اضافه کردن داد ه های profile و خصوصیات کاربر به کلاس User

در این بخش اطلاعاتی نظیر تاریخ و مکان تولد کاربر مورد نظر را در طول پروسه ی ثبت نام مانند تصویر زیر به جدول Users اضافه می کنید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

فایل Models\IdentityModels.cs را باز کرده و property های birth date و home town را در این فایل اضافه نمایید:


C#Copy:
public class ApplicationUser : IdentityUser
{
    public string HomeTown { get; set; }
    public System.DateTime? BirthDate { get; set; }
    public async Task GenerateUserIdentityAsync(UserManager manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}

فایل Models\AccountViewModels.cs را باز کرده و property های birth date و home town را در کلاسExternalLoginConfirmationViewModel مقداردهی نمایید.
کد C#:


                       public class ExternalLoginConfirmationViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }
    public string HomeTown { get; set; }
    public System.DateTime? BirthDate { get; set; }
}

                    

فایل Controllers\AccountController.cs را باز کرده و کد متناظر برای birth date و home town را در متد (action method) ExternalLoginConfirmation مانند زیر اضافه نمایید:
کد C#:


[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
{
    if (User.Identity.IsAuthenticated)
    {
        return RedirectToAction("Manage");
    }
    if (ModelState.IsValid)
    {
        // Get the information about the user from the external login provider
        var info = await AuthenticationManager.GetExternalLoginInfoAsync();
        if (info == null)
        {
            return View("ExternalLoginFailure");
        }
        var user = new ApplicationUser() 
        {
            UserName = model.Email, Email = model.Email,
            BirthDate = model.BirthDate,
            HomeTown  = model.HomeTown
        };
        IdentityResult result = await UserManager.CreateAsync(user);
        if (result.Succeeded)
        {
            result = await UserManager.AddLoginAsync(user.Id, info.Login);
            if (result.Succeeded)
            {
                await SignInAsync(user, isPersistent: false);
                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                // Send an email with this link
                // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                // SendEmail(user.Email, callbackUrl, "Confirm your account", "Please confirm your account by clicking this link");
                return RedirectToLocal(returnUrl);
            }
        }
        AddErrors(result);
    }
    ViewBag.ReturnUrl = returnUrl;
    return View(model);
}

کد متناظر birth date و home town را به فایل Views\Account\ExternalLoginConfirmation.cshtml اضافه نمایید:
فایل :cshtmlCopy


@model MvcAuth.Models.ExternalLoginConfirmationViewModel
@{
    ViewBag.Title = "Register";
}

@ViewBag.Title.

Associate your @ViewBag.LoginProvider account.

@using (Html.BeginForm("ExternalLoginConfirmation", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken()

Association Form


@Html.ValidationSummary(true, "", new { @class = "text-danger" })

You've successfully authenticated with @ViewBag.LoginProvider. Please enter a user name for this site below and click the Register button to finish logging in.

@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" })
@Html.LabelFor(m => m.HomeTown, new { @class = "col-md-2 control-label" })
@Html.TextBoxFor(m => m.HomeTown, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.HomeTown)
@Html.LabelFor(m => m.BirthDate, new { @class = "col-md-2 control-label" })
@Html.TextBoxFor(m => m.BirthDate, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.BirthDate)
} @section Scripts { @Scripts.Render("~/bundles/jqueryval") }

دیتابیس membership را حذف نموده تا بتوانید حساب کاربری Facebook خود را برای اپلیکیشن مورد نظر مجددا معرفی کرده و مطمئن شوید که می توانید اطلاعات جدید birth date و home town را به پروفایل کاربر اضافه نمایید.
از کادر Solution Explorer، بر روی آیکون Show All Files کلیک کرده، سپس بر روی Add_Data\aspnet-MvcAuth-.mdf راست کلیک نمایید و گزینه ی Delete را گزینش کنید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

از منو Tools، آیتم NuGet Package Manager را انتخاب کرده، سپس با کلیک بر روی Package Manager Console، پنجره ی کنسول مدیریت پکیج ها را باز نمایید. حال دستورهای زیر را در PMC درج کنید:


Enable-Migrations
Add-Migration Init
Update-Database

اپلیکیشن را اجرا کرده و با استفاده از اطلاعات احراز هویت که دو سایت FaceBook و Google ارائه می دهند، تعدادی کاربر را معرفی (register) و وارد اپلیکیشن نمایید.


بررسی اطلاعات عضویت کاربران

در منوی View، بر روی گزینه ی Server Explorer کلیک نمایید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

بر روی AspNetUsers راست کلیک کرده و سپس Show Table Data را انتخاب نمایید.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

فیلدهای HomeTown و BirthDate در جدول زیر قابل مشاهده می باشند.


آموزش MVC-پیاده سازی احراز هویت در شبکه های مجازی

از اپلیکیشن بیرون آمدن (log off) اپلیکیشن و وارد شدن به آن با حساب کاربری متفاوت

چنانچه به اپلیکیشن خود با اطلاعات احرازهویت از سمت Facebook وارد سایت شوید، سپس از وب سایت log out کرده و بار دیگر با حساب کاربری متفاوت وارد شوید (به وسیله ی همان مرورگر)، می بینید که بلافاصله با حساب کاربری قبلی facebook به سایت راه پیدا می کنید. به منظور استفاده از حساب کاربری متفاوت، لازم است به Facebook مراجعه کرده و از آنجا logout نمایید. همین قانون درباره ی تمامی ارائه دهندگان اطلاعات احرازهویت خارجی (external authentication provider) صادق می باشد. در صورت تمایل می توانید با حساب کاربری کاملا متفاوت و از طریق یک مرورگر دیگر اقدام نمایید.


  • 1227
  •    1040
  • تاریخ ارسال :   1396/07/11

دانلود PDF دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .