บทความนี้อธิบายการตรวจสอบความถูกต้องสองปัจจัยโดยละเอียดและวิธีการใช้งานใน. NET 5 โดยใช้เฟรมเวิร์กประจำตัวเช่น IdentityServer4 และผู้ให้บริการ SMS (Twilio)

{{LINE_11}} มันมีส่วนต่อไปนี้:

การรับรองความถูกต้องสองปัจจัยคืออะไร?

ปัจจัยในบริบทนี้แสดงถึงวิธีที่คุณสามารถโน้มน้าวแอพหรือบริการที่คุณเป็นเจ้าของบัญชี ชื่อผู้ใช้/รหัสผ่านใช้กันอย่างแพร่หลายเป็นปัจจัยการตรวจสอบที่พบมากที่สุด อย่างไรก็ตามเนื่องจากปัญหาด้านความปลอดภัยมากมายที่เกี่ยวข้องกับไอทีและการละเมิดข้อมูลที่แพร่หลายล่าสุด-การตรวจสอบความถูกต้องของปัจจัยเดียวได้กลายเป็นความปลอดภัยน้อยลง การรับรองความถูกต้องแบบสองปัจจัยเป็นเลเยอร์ความปลอดภัยเพิ่มเติมซึ่งเข้ามาเล่นก่อนที่คุณจะสามารถเข้าถึงบัญชีของคุณได้ ในการเพิ่มเข้าสู่กระบวนการเข้าสู่ระบบมาตรฐาน-แนะนำขั้นตอนพิเศษในการตรวจสอบตัวตนของผู้ใช้โดยส่งรหัส (ไปยังอีเมลของคุณหรือเป็นข้อความ) ด้วยวิธีนี้ตัวตนของคุณได้รับการพิสูจน์แล้วและอนุญาตให้เข้าถึงได้เท่านั้น

2FA ทำงานอย่างไร?

ใน 2FA รหัสผ่านยังคงเป็นปัจจัยการตรวจสอบความถูกต้องแรกของคุณ - ดังนั้นเมื่อคุณเข้าสู่ระบบบัญชีของคุณจะนำคุณไปยังหน้าอื่นที่คุณจำเป็นต้องตรวจสอบความเป็นเจ้าของบัญชี สามารถทำได้โดยใช้วิธีต่าง ๆ :

  1. แอปพลิเคชันส่งรหัสการยืนยันมักเรียกว่า OTP (รหัสผ่านครั้งเดียว) ไปยังที่อยู่อีเมลของคุณ
  2. รหัสถูกส่งเป็นข้อความบนโทรศัพท์ของคุณ
  3. คุณติดตั้งแอพ Authenticator บนมือถือซึ่งคุณสามารถอนุญาตคำขอเข้าสู่ระบบได้ หมายเหตุ: รหัสการตรวจสอบเหล่านี้ถูกสร้างขึ้นแบบสุ่มและหมดอายุเมื่อใช้ นอกจากนี้ยังมีชีวิตสั้น - ดังนั้นจึงมีหน้าต่างสั้น ๆ ก่อนที่คุณจะสามารถใช้รหัส (ซึ่งจะป้องกันไม่ให้แฮ็กเกอร์บังคับรหัสการตรวจสอบ)

เราสามารถโทร 2FA เป็นการรับรองความถูกต้องแบบหลายปัจจัยได้หรือไม่?

วิธีการตรวจสอบความถูกต้องไม่ จำกัด เพียงสองปัจจัย แอพและบริการจำนวนมากกำลังย้ายผู้ใช้เกิน 2FA และใช้การตรวจสอบความถูกต้องแบบหลายปัจจัย 2FA และ MFA (การพิสูจน์ตัวตนแบบหลายปัจจัย) มักจะใช้แทนกันได้ อย่างไรก็ตามมีความแตกต่าง ในการตรวจสอบความถูกต้องหลายปัจจัยมีการใช้ปัจจัยสองปัจจัยขึ้นไป สามารถตรวจสอบที่อยู่ IP ของผู้ใช้ข้อมูลทางภูมิศาสตร์และข้อมูลอุปกรณ์ในการเพิ่มปัจจัยอื่น ๆ เช่นรหัสผ่านและ OTP เพื่อตรวจสอบตัวตนของผู้ใช้ ดังนั้นเราสามารถพูดได้ว่า 2FA เป็นชุดย่อยของ MFA ใน 2FA จะมีเพียงสองปัจจัยในขณะที่หลายปัจจัยสามารถใช้ปัจจัยสองประการขึ้นไป MFA ทำให้แฮกเกอร์ยากขึ้นเนื่องจากเพิ่มความปลอดภัยหลายเลเยอร์ในกระบวนการตรวจสอบความถูกต้องแบบดั้งเดิม

มีข้อเสียใด ๆ ที่ใช้ 2FA หรือไม่?

คล้ายกับโซลูชัน ‘ความปลอดภัยและความเป็นส่วนตัว’ มากมายที่มีอยู่ในแอพที่ทันสมัย นอกจากนี้ยังมาพร้อมกับราคา - ความไม่สะดวกเนื่องจากมีขั้นตอนเพิ่มเติมที่เกี่ยวข้องซึ่งอาจทำให้เกิดแรงเสียดทานในประสบการณ์ผู้ใช้ อย่างไรก็ตามมีการใช้แอพและบริการหลายอย่างดังนั้นการแลกเปลี่ยนนี้จึงเป็นที่ยอมรับ

ฉันจะใช้การรับรองความถูกต้อง 2FA ได้อย่างไร

ในส่วนนี้เราจะได้เรียนรู้วิธีการใช้ 2FA ใน. NET5 โดยใช้ IdentityServer4 และ Twilio ดังนั้นมาสร้างบัญชีทดลองใช้ Twilio:

  1. ลงชื่อสมัครใช้
  2. ยืนยันบัญชีของคุณโดยให้หมายเลขโทรศัพท์ที่ถูกต้อง เมื่อบัญชีของคุณได้รับการยืนยันแล้วคุณสามารถใช้แผงควบคุมคอนโซลได้
แดชบอร์ด Twilio
  1. คัดลอกบัญชีของคุณ SID และ Auth Token จากแดชบอร์ด
  2. นำทางไปซื้อหมายเลขที่คุณจะใช้สำหรับการส่ง SMS/ หมายเหตุ: Twilio ให้เครดิต 15 $ ในบัญชีทดลองใช้ทั้งหมดซึ่งคุณจะใช้ซื้อหมายเลขโทรศัพท์
Twilio - การค้นหาหมายเลขโทรศัพท์

คุณสามารถเลือกหมายเลขใดก็ได้ตราบเท่าที่รองรับ ‘ความสามารถของ SMS’ (หมายเหตุหมายเลขโทรศัพท์ของคุณซึ่งเราจะใช้ในการกำหนดค่าในภายหลังในโครงการของเรา) 5. การใช้บัญชีทดลองใช้ Twilio อนุญาตให้คุณส่ง SMS ไปยังรหัสผู้โทรที่ตรวจสอบแล้วซึ่งคุณสามารถจัดการได้โดยใช้ลิงค์ด้านล่าง: นั่นคือทั้งหมดที่คุณต้องกำหนดค่าโดยใช้ Twilio Dashboard มาสร้างแอป ASP.NET CORE Web (เลือกเทมเพลตโครงการด้านล่างและเป้าหมาย. NET5

Visual Studio - โครงการใหม่

ตอนนี้เราจะรวม IdentityServer4, แพ็คเกจ Twilio จาก NuGet

  1. Install -Package IdentityServer4 -Version 4.1.1
  2. ติดตั้งแพคเกจ twilio -version 5.55.0 IdentityServer4 Quick UI มีอยู่ที่: คุณสามารถรวมไว้ในโครงการของคุณโดยเรียกใช้คำสั่งด้านล่างในเชลล์นักพัฒนาซอฟต์แวร์: `IEX ((new-oBject System.net.webClient) .downloadstring (‘https://raw.githubusercontent.com/identityserver/identityserver4.quickstart.ui/main/getmain.ps1' หากติดตั้งอย่างถูกต้อง - คุณจะเห็นโฟลเดอร์ QuickStart ในโครงการของคุณ:
ลำดับชั้นของโครงการ

มาสร้างและดำเนินโครงการนี้กันเถอะ คุณควรจะเห็นหน้าต้อนรับตามที่แสดงด้านล่าง:

เทมเพลตนี้ใช้ที่เก็บข้อมูลในหน่วยความจำดังนั้นคุณสามารถเพิ่มผู้ใช้ทดสอบของคุณในไฟล์ config.cs

config.cs คลาส

เปิด startup.cs และเพิ่มบริการ IdentityServer4 ต่อไปนี้ในวิธีการกำหนดค่าบริการ:

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

ตอนนี้เพิ่ม IdentityServer ในระบบคำขอ:

app.UseIdentityServer();

รันโครงการและนำทางไปที่ _/บัญชี/เข้าสู่ระบบ _

IdentityServer4 - เข้าสู่ระบบ

เข้าสู่ระบบด้วยข้อมูลรับรองที่เพิ่มใน config.cs เมื่อมีการกำหนดค่าและเรียกใช้ IdentityServer จากนั้นเราสามารถเพิ่มการสนับสนุนสำหรับ 2FA โดยใช้ Twilio มาเพิ่มคลาสต่อไปนี้:

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

คลาสการกำหนดค่านี้จะใช้ในการฉีดการตั้งค่าโดยใช้การฉีดพึ่งพา

  1. RightClick ในโครงการและเพิ่มความลับของผู้ใช้ด้วยการกำหนดค่าของ Twilio (SID, Token, Phonenumber)
  2. การตั้งค่าการฉีดในวิธีการกำหนดค่าบริการของ startup.cs
 var twilioSettings = Configuration.GetSection("TwilioSettings");
 services.Configure<TwilioSettings>(twilioSettings);

startup.cs ได้รับการกำหนดค่าแล้ว ตอนนี้เราสามารถก้าวต่อไปเพื่อเพิ่มบริการใหม่ที่เรียกว่า AuthMessagesender ซึ่งจะรับผิดชอบในการส่ง SMS โดยใช้ Twilio มาสร้างอินเทอร์เฟซที่ AuthMessagesender จะใช้

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

เราจะฉีดสิ่งนี้ใน startup.cs

services.AddTransient <ISmsSender, AuthMessageSender>();

รหัสการส่ง SMS นั้นค่อนข้างง่าย เราเพียงแค่สร้างไคลเอนต์ Twilio และเรียกใช้วิธีการสร้าง Messageresource.createasync เพื่อส่ง SMS

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/Views:

2fa ในการดำเนินการ

แก้ไขวิธีบัญชี/เข้าสู่ระบบเพื่อสร้างและส่งรหัสการยืนยันหลังจากตรวจสอบข้อมูลรับรอง เราไม่ต้องการให้การลงชื่อเข้าใช้เสร็จสมบูรณ์ในขณะนี้ ดังนั้นการเรียกใช้วิธี httpContext.signinasync จะถูกลบออกและเราจะสร้างรหัสการตรวจสอบแบบสุ่มและจัดเก็บ (ปัจจุบันเรากำลังใช้ร้านค้าในหน่วยความจำเพื่อการสาธิต)

[HttpPost]

[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model, string button)
ภาพหน้าจอรหัส

จากนั้นเราจะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้า“ VerifyCode” ที่จะทำการตรวจสอบรหัสและเวิร์กโฟลว์ลงชื่อเข้าใช้จะเสร็จสมบูรณ์ ในการดำเนินการ VerifyCode เราเพียงแค่ดึงข้อมูลผู้ใช้และรหัสจากหน่วยความจำและจับคู่กับรหัสที่ให้ไว้

ภาพหน้าจอรหัส

หากรหัสถูกจับคู่แล้วเราก็จะทำตามคำขอการตรวจสอบความถูกต้องโดยการเรียกใช้เมธอด signinasync และเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าที่ได้รับอนุญาต มาเรียกใช้โครงการกันเถอะ ขั้นตอนที่ -1: ผู้ใช้ให้ข้อมูลรับรอง

2Fademo - เข้าสู่ระบบ

ขั้นตอนที่ 2: ข้อมูลรับรองได้รับการตรวจสอบและส่งรหัสการตรวจสอบแล้ว:

2Fademo - SMS

ขั้นตอนที่ 3: ผู้ใช้ตรวจสอบรหัสที่ถูกต้อง

2Fademo - VerifyCode

รหัสขั้นตอนที่ 4 ได้รับการตรวจสอบแล้วและการรับรองความถูกต้อง 2FA เสร็จสมบูรณ์

2Fademo - หน้าผู้มีอำนาจ

บทสรุป:

ในบทความนี้เราได้เรียนรู้เกี่ยวกับ 2FA และการใช้งานใน. NET5 โดยใช้ IdentityServer4 และ Twilio คุณสามารถดาวน์โหลดรหัสตัวอย่างที่ใช้ในบทความนี้ได้จาก [repo] นี้ 6 การใช้ SMS สำหรับ 2FA ทำให้ความปลอดภัยของคุณแข็งแกร่งขึ้นอย่างแน่นอน แต่ก็ยังเสี่ยงต่อการ Sim Swap Attacks ดังนั้นนักวิจัยด้านความปลอดภัยจึงสนับสนุนให้ 2FA ใช้วิธีการอื่น ๆ เช่นแอพ Authenticator และปุ่มรักษาความปลอดภัย (Yubikey) ซึ่งไม่สามารถสกัดกั้นบนเครือข่ายโทรศัพท์ได้ เราจะเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ในบทความที่กำลังจะมาถึง - คอยติดตาม!