این مقاله تأیید هویت دو عاملی را با جزئیات و چگونگی اجرای آن در .NET 5 با استفاده از چارچوب های هویت مانند IdentityServer4 و ارائه دهنده پیام کوتاه (TWILIO) توضیح می دهد.

{{LINE_11}} این بخش های زیر را شامل می شود:

احراز هویت دو عاملی چیست؟

عاملی در این زمینه به معنای روشی است که می توانید یک برنامه یا سرویس را متقاعد کنید که صاحب حساب هستید. نام کاربری/رمز عبور به طور گسترده به عنوان رایج ترین عامل احراز هویت استفاده می شود. با این حال ، به دلیل بسیاری از مسائل امنیتی مرتبط با آن و نقض داده های گسترده اخیر-تأیید هویت تک عاملی کمتر ایمن شده است. احراز هویت دو عاملی یک لایه امنیتی اضافی است که قبل از اینکه بتوانید به حساب خود دسترسی پیدا کنید ، بازی می شود. در حال افزودن به فرآیند ورود به سیستم استاندارد-این یک گام اضافی برای تأیید هویت کاربر با ارسال کد (به ایمیل خود یا به عنوان پیام متنی) ارائه می دهد. به این ترتیب ، هویت شما ثابت می شود و فقط در این صورت دسترسی اعطا می شود.

2FA چگونه کار می کند؟

در 2FA ، گذرواژه هنوز اولین عامل تأیید اعتبار شماست - بنابراین وقتی به حساب خود وارد می شوید ، شما را به صفحه دیگری هدایت می کند که در آن برای تأیید مالکیت حساب مورد نیاز هستید. این کار با استفاده از روشهای مختلف قابل انجام است:

  1. برنامه یک کد تأیید را که اغلب به نام OTP (رمزهای عبور یک بار) به آدرس ایمیل شما ارسال می شود ، ارسال می کند.
  2. کد به عنوان پیام متنی در تلفن شما تحویل داده می شود.
  3. شما یک برنامه تأیید کننده را بر روی موبایل نصب می کنید که از طریق آن می توانید درخواست های ورود به سیستم را مجاز کنید. توجه: این کدهای تأیید به طور تصادفی تولید می شوند و پس از استفاده منقضی می شوند. همچنین ، آنها کوتاه مدت هستند - بنابراین یک پنجره کوتاه قبل از استفاده از کد وجود دارد (این مانع از هکر می شود که کدهای تأیید را بی رحمانه کند).

آیا می توانیم 2FA را به عنوان احراز هویت چند عاملی بنامیم؟

روش های احراز هویت محدود به دو عاملی نیست. بسیاری از برنامه ها و خدمات کاربران خود را فراتر از 2FA قرار می دهند و از تأیید هویت چند عاملی استفاده می کنند. 2FA و MFA (احراز هویت چند عاملی) اغلب به صورت متناوب مورد استفاده قرار می گیرند. با این حال تفاوت وجود دارد. در احراز هویت چند عاملی از دو یا چند عامل استفاده می شود. این می تواند آدرس IP کاربر ، مکان جغرافیایی و اطلاعات دستگاه را در مورد سایر عوامل مانند رمز عبور و OTP برای تأیید هویت کاربر بررسی کند. بنابراین ، می توانیم بگوییم که 2FA زیر مجموعه MFA است. در 2FA فقط دو عامل وجود خواهد داشت ، در حالی که چند عامل می تواند از دو یا چند عامل استفاده کند. MFA برای هکرها دشوار است زیرا در فرآیند احراز هویت سنتی چندین لایه امنیتی را اضافه می کند.

آیا اشکالاتی با استفاده از 2FA وجود دارد؟

مشابه بسیاری از راه حل های “امنیت و حریم خصوصی” که در برنامه های مدرن وجود دارد. همچنین با قیمت - ناراحتی همراه است ، زیرا یک قدم اضافی وجود دارد که ممکن است باعث ایجاد اصطکاک در تجربه کاربر شود. با این حال ، این توسط بسیاری از برنامه ها و خدمات اتخاذ می شود ، بنابراین این تجارت قابل قبول است.

چگونه می توانم احراز هویت 2FA را پیاده سازی کنم؟

در این بخش ، ما می آموزیم که چگونه 2FA را در .NET5 با استفاده از IdentityServer4 و Twilio پیاده سازی کنیم. بنابراین بیایید یک حساب آزمایشی در Twilio ایجاد کنیم:

  1. ثبت نام در
  2. با ارائه شماره تلفن معتبر ، حساب خود را تأیید کنید. پس از تأیید حساب شما می توانید از داشبورد کنسول آنها استفاده کنید.
داشبورد دوقلوی
  1. حساب خود را SID و AUT TOKEN از داشبورد کپی کنید.
  2. برای خرید شماره ای که برای ارسال پیامک استفاده می کنید ، حرکت کنید توجه: Twilio در کلیه حساب های آزمایشی که برای خرید شماره تلفن استفاده می کنید ، 15 دلار اعتبار می دهد.
Twilio - جستجوی شماره تلفن

ممکن است تا زمانی که از “قابلیت های پیامکی” پشتیبانی کند ، هر عدد را انتخاب کنید. (شماره تلفن خود را که ما برای پیکربندی بعداً در پروژه خود استفاده خواهیم کرد ، یادداشت کنید). 5. با استفاده از حساب آزمایشی ، Twilio فقط به شما امکان می دهد پیامکی را به شناسه های تماس گیرنده تأیید شده ارسال کنید که می توانید با استفاده از لینک زیر مدیریت کنید: این تنها چیزی است که شما باید با استفاده از داشبورد Twilio پیکربندی کنید. بیایید یک برنامه وب ASP.NET Core ایجاد کنیم (الگوی پروژه را به صورت زیر و Target .NET5 انتخاب کنید.

ویژوال استودیو - پروژه جدید

اکنون بسته های Twilio از NUGET IdentityServer4 را ادغام خواهیم کرد.

  1. نصب -بسته بندی IdentityServer4 -Version 4.1.1
  2. نصب -بسته بندی Twilio -version 5.55.0 UIS IEPORITYSERVER4 UI در: شما می توانید با اجرای دستور زیر در Shell Developer ، آن را در پروژه خود قرار دهید: iex ((new-object system.net.webclient) .downloadString ('https://raw.githubusercontent.com/entientityserver/itionityserver4.quickstart.ui/main/getmain.ps1')) اگر به درستی نصب شده باشد - پوشه QuickStart را در پروژه خود مشاهده می کنید:
سلسله مراتب پروژه

بیایید این پروژه را بسازیم و اجرا کنیم. شما باید بتوانید صفحه خوش آمدید را مطابق شکل زیر مشاهده کنید:

این الگوی از فروشگاه داده در حافظه استفاده می کند ، بنابراین می توانید کاربران تست خود را در پرونده Config.cs اضافه کنید

CONFIG.CS کلاس

Startup.cs را باز کنید و خدمات زیر IdentityServer4 را در روش ConfigService اضافه کنید:

  services.AddIdentityServer()
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
        .AddTestUsers(Config.GetUsers())
        .AddInMemoryClients(Config.GetClients())
        .AddDeveloperSigningCredential();

اکنون IdentityServer را در خط لوله درخواست اضافه کنید:

app.UseIdentityServer();

پروژه را اجرا کنید و به _/حساب/ورود به سیستم _ بروید

IdentityServer4 - ورود به سیستم

با اعتبارنامه اضافه شده در config.cs وارد شوید پس از پیکربندی و اجرای IdentityServer. سپس می توانیم با استفاده از Twilio پشتیبانی از 2FA را اضافه کنیم. بیایید کلاس زیر را اضافه کنیم:

  public class TwilioSettings
    {
        public string Sid { get; set; }
        public string Token { get; set; }
        public string From { get; set; }
     }

این کلاس پیکربندی برای تزریق تنظیمات با استفاده از تزریق وابستگی استفاده می شود.

  1. بر روی پروژه کلیک راست کرده و اسرار کاربر را با پیکربندی Twilio اضافه کنید (SID ، Token ، PhoneNumber)
  2. تزریق تنظیمات در روش پیکربندی سرویس راه اندازی. cs
 var twilioSettings = Configuration.GetSection("TwilioSettings");
 services.Configure<TwilioSettings>(twilioSettings);

Startup.cs پیکربندی شده است. اکنون می توانیم به اضافه کردن یک سرویس جدید به نام AuthMessagesender که مسئولیت ارسال پیامک با استفاده از Twilio را بر عهده دارد ، حرکت کنیم. بیایید رابط کاربری ایجاد کنیم که AuthMessageSender اجرا خواهد کرد.

public interface ISmsSender
    {
        Task SendSmsAsync(string number, string message);
    }

ما این را در startup.cs تزریق خواهیم کرد.

services.AddTransient <ISmsSender, AuthMessageSender>();

کد ارسال پیام کوتاه بسیار ساده است. ما به سادگی یک مشتری Twilio ایجاد می کنیم و روش MessageResource.CreateAsync را برای ارسال پیامک فراخوانی می کنیم.

public Task SendSmsAsync(string number, string message)
{
              var sid = _twilioSettings.Value.Sid;
            var token = _twilioSettings.Value.Token;
            var from = _twilioSettings.Value.From;
            TwilioClient.Init(sid, token);
            MessageResource.CreateAsync(new PhoneNumber(number),
                from: new PhoneNumber(from),
                body: message);
            return Task.FromResult(0);
}

ما روش ورود را اصلاح خواهیم کرد تا بررسی کنیم که آیا کاربر 2FA را فعال کرده است تا بتوانیم آنها را برای تأیید کد هدایت کنیم. VerifyCode.cshtml را در QuickStart/مشاهده اضافه کنید:

2FA در عمل

پس از تأیید اعتبار ، روش حساب/ورود را برای تولید و ارسال کد تأیید تغییر دهید. ما نمی خواهیم در این لحظه علامت درخواست را تکمیل کنیم. بنابراین ، تماس روش httpcontext.signinasync حذف می شود ، و در عوض ما به سادگی یک کد تأیید تصادفی تولید می کنیم و آن را ذخیره می کنیم (در حال حاضر ما از فروشگاه های حافظه برای اهداف تظاهرات استفاده می کنیم).

[HttpPost]

[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model, string button)
تصویر کد

و سپس ما کاربر را به صفحه “VerifyCode” هدایت می کنیم که تأیید کد انجام می شود و گردش کار ورود به سیستم تکمیل می شود. در عمل VerifyCode ما به سادگی اطلاعات کاربر و کد را از حافظه واگذار می کنیم و آن را با کد ارائه شده مطابقت می دهیم.

تصویر کد

اگر کد مطابقت داشته باشد ، ما با استناد به روش SignInasync ، درخواست تأیید اعتبار را تکمیل می کنیم و کاربر را به صفحه مجاز هدایت می کنیم. بیایید پروژه را اجرا کنیم مرحله -1: کاربر اعتبار را ارائه می دهد.

2Fademo - ورود به سیستم

مرحله 2: اعتبارنامه تأیید شده و یک کد تأیید ارسال می شود:

2Fademo - پیام کوتاه

مرحله 3: کاربر کد صحیح را تأیید می کند.

2fademo - تأیید کد

کد مرحله 4 تأیید شده و احراز هویت 2FA به پایان رسیده است.

2fademo - صفحه مجاز

نتیجه:

در این مقاله ، ما در مورد 2FA و اجرای آن در .NET5 با استفاده از IdentityServer4 و Twilio آموخته ایم. می توانید کد نمونه مورد استفاده در این مقاله را از این repo بارگیری کنید. استفاده از پیام کوتاه برای 2FA مطمئناً امنیت شما را تقویت می کند اما هنوز هم در برابر [حملات مبادله ای] آسیب پذیر است 7. بنابراین ، محققان امنیتی 2FA را ترغیب می کنند تا از رویکردهای دیگری مانند برنامه های تأیید کننده و کلیدهای امنیتی استفاده کنند (Yubikey) که نمی توانند در شبکه تلفن رهگیری کنند. ما در مقاله آینده اطلاعات بیشتری در مورد آن خواهیم داشت - با ما همراه باشید!