บทความนี้อธิบายการตรวจสอบความถูกต้องสองปัจจัยโดยละเอียดและวิธีการใช้งานใน. NET 5 โดยใช้เฟรมเวิร์กประจำตัวเช่น IdentityServer4 และผู้ให้บริการ SMS (Twilio)
{{LINE_11}} มันมีส่วนต่อไปนี้:
- การรับรองความถูกต้องสองปัจจัยคืออะไร?
- 2FA ทำงานอย่างไร
- 2FA และการรับรองความถูกต้องหลายปัจจัย
- ข้อเสียของการใช้ 2FA
- การใช้ 2FA ใน. NET5 ก่อนอื่นมาทำความเข้าใจว่า 2FA คืออะไรและทำไมจึงต้องเป็นส่วนหนึ่งของเว็บแอปพลิเคชันที่ทันสมัยทุกครั้ง
การรับรองความถูกต้องสองปัจจัยคืออะไร?
ปัจจัยในบริบทนี้แสดงถึงวิธีที่คุณสามารถโน้มน้าวแอพหรือบริการที่คุณเป็นเจ้าของบัญชี ชื่อผู้ใช้/รหัสผ่านใช้กันอย่างแพร่หลายเป็นปัจจัยการตรวจสอบที่พบมากที่สุด อย่างไรก็ตามเนื่องจากปัญหาด้านความปลอดภัยมากมายที่เกี่ยวข้องกับไอทีและการละเมิดข้อมูลที่แพร่หลายล่าสุด-การตรวจสอบความถูกต้องของปัจจัยเดียวได้กลายเป็นความปลอดภัยน้อยลง การรับรองความถูกต้องแบบสองปัจจัยเป็นเลเยอร์ความปลอดภัยเพิ่มเติมซึ่งเข้ามาเล่นก่อนที่คุณจะสามารถเข้าถึงบัญชีของคุณได้ ในการเพิ่มเข้าสู่กระบวนการเข้าสู่ระบบมาตรฐาน-แนะนำขั้นตอนพิเศษในการตรวจสอบตัวตนของผู้ใช้โดยส่งรหัส (ไปยังอีเมลของคุณหรือเป็นข้อความ) ด้วยวิธีนี้ตัวตนของคุณได้รับการพิสูจน์แล้วและอนุญาตให้เข้าถึงได้เท่านั้น
2FA ทำงานอย่างไร?
ใน 2FA รหัสผ่านยังคงเป็นปัจจัยการตรวจสอบความถูกต้องแรกของคุณ - ดังนั้นเมื่อคุณเข้าสู่ระบบบัญชีของคุณจะนำคุณไปยังหน้าอื่นที่คุณจำเป็นต้องตรวจสอบความเป็นเจ้าของบัญชี สามารถทำได้โดยใช้วิธีต่าง ๆ :
- แอปพลิเคชันส่งรหัสการยืนยันมักเรียกว่า OTP (รหัสผ่านครั้งเดียว) ไปยังที่อยู่อีเมลของคุณ
- รหัสถูกส่งเป็นข้อความบนโทรศัพท์ของคุณ
- คุณติดตั้งแอพ Authenticator บนมือถือซึ่งคุณสามารถอนุญาตคำขอเข้าสู่ระบบได้ หมายเหตุ: รหัสการตรวจสอบเหล่านี้ถูกสร้างขึ้นแบบสุ่มและหมดอายุเมื่อใช้ นอกจากนี้ยังมีชีวิตสั้น - ดังนั้นจึงมีหน้าต่างสั้น ๆ ก่อนที่คุณจะสามารถใช้รหัส (ซึ่งจะป้องกันไม่ให้แฮ็กเกอร์บังคับรหัสการตรวจสอบ)
เราสามารถโทร 2FA เป็นการรับรองความถูกต้องแบบหลายปัจจัยได้หรือไม่?
วิธีการตรวจสอบความถูกต้องไม่ จำกัด เพียงสองปัจจัย แอพและบริการจำนวนมากกำลังย้ายผู้ใช้เกิน 2FA และใช้การตรวจสอบความถูกต้องแบบหลายปัจจัย 2FA และ MFA (การพิสูจน์ตัวตนแบบหลายปัจจัย) มักจะใช้แทนกันได้ อย่างไรก็ตามมีความแตกต่าง ในการตรวจสอบความถูกต้องหลายปัจจัยมีการใช้ปัจจัยสองปัจจัยขึ้นไป สามารถตรวจสอบที่อยู่ IP ของผู้ใช้ข้อมูลทางภูมิศาสตร์และข้อมูลอุปกรณ์ในการเพิ่มปัจจัยอื่น ๆ เช่นรหัสผ่านและ OTP เพื่อตรวจสอบตัวตนของผู้ใช้ ดังนั้นเราสามารถพูดได้ว่า 2FA เป็นชุดย่อยของ MFA ใน 2FA จะมีเพียงสองปัจจัยในขณะที่หลายปัจจัยสามารถใช้ปัจจัยสองประการขึ้นไป MFA ทำให้แฮกเกอร์ยากขึ้นเนื่องจากเพิ่มความปลอดภัยหลายเลเยอร์ในกระบวนการตรวจสอบความถูกต้องแบบดั้งเดิม
มีข้อเสียใด ๆ ที่ใช้ 2FA หรือไม่?
คล้ายกับโซลูชัน ‘ความปลอดภัยและความเป็นส่วนตัว’ มากมายที่มีอยู่ในแอพที่ทันสมัย นอกจากนี้ยังมาพร้อมกับราคา - ความไม่สะดวกเนื่องจากมีขั้นตอนเพิ่มเติมที่เกี่ยวข้องซึ่งอาจทำให้เกิดแรงเสียดทานในประสบการณ์ผู้ใช้ อย่างไรก็ตามมีการใช้แอพและบริการหลายอย่างดังนั้นการแลกเปลี่ยนนี้จึงเป็นที่ยอมรับ
ฉันจะใช้การรับรองความถูกต้อง 2FA ได้อย่างไร
ในส่วนนี้เราจะได้เรียนรู้วิธีการใช้ 2FA ใน. NET5 โดยใช้ IdentityServer4 และ Twilio ดังนั้นมาสร้างบัญชีทดลองใช้ Twilio:
- ลงชื่อสมัครใช้
- ยืนยันบัญชีของคุณโดยให้หมายเลขโทรศัพท์ที่ถูกต้อง เมื่อบัญชีของคุณได้รับการยืนยันแล้วคุณสามารถใช้แผงควบคุมคอนโซลได้
- คัดลอกบัญชีของคุณ SID และ Auth Token จากแดชบอร์ด
- นำทางไปซื้อหมายเลขที่คุณจะใช้สำหรับการส่ง SMS/ หมายเหตุ: Twilio ให้เครดิต 15 $ ในบัญชีทดลองใช้ทั้งหมดซึ่งคุณจะใช้ซื้อหมายเลขโทรศัพท์
คุณสามารถเลือกหมายเลขใดก็ได้ตราบเท่าที่รองรับ ‘ความสามารถของ SMS’ (หมายเหตุหมายเลขโทรศัพท์ของคุณซึ่งเราจะใช้ในการกำหนดค่าในภายหลังในโครงการของเรา) 5. การใช้บัญชีทดลองใช้ Twilio อนุญาตให้คุณส่ง SMS ไปยังรหัสผู้โทรที่ตรวจสอบแล้วซึ่งคุณสามารถจัดการได้โดยใช้ลิงค์ด้านล่าง: นั่นคือทั้งหมดที่คุณต้องกำหนดค่าโดยใช้ Twilio Dashboard มาสร้างแอป ASP.NET CORE Web (เลือกเทมเพลตโครงการด้านล่างและเป้าหมาย. NET5
ตอนนี้เราจะรวม IdentityServer4, แพ็คเกจ Twilio จาก NuGet
Install -Package IdentityServer4 -Version 4.1.1
ติดตั้งแพคเกจ 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
เปิด startup.cs และเพิ่มบริการ IdentityServer4 ต่อไปนี้ในวิธีการกำหนดค่าบริการ:
services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddTestUsers(Config.GetUsers())
.AddInMemoryClients(Config.GetClients())
.AddDeveloperSigningCredential();
ตอนนี้เพิ่ม IdentityServer ในระบบคำขอ:
app.UseIdentityServer();
รันโครงการและนำทางไปที่ _/บัญชี/เข้าสู่ระบบ _
เข้าสู่ระบบด้วยข้อมูลรับรองที่เพิ่มใน config.cs เมื่อมีการกำหนดค่าและเรียกใช้ IdentityServer จากนั้นเราสามารถเพิ่มการสนับสนุนสำหรับ 2FA โดยใช้ Twilio มาเพิ่มคลาสต่อไปนี้:
public class TwilioSettings
{
public string Sid { get; set; }
public string Token { get; set; }
public string From { get; set; }
}
คลาสการกำหนดค่านี้จะใช้ในการฉีดการตั้งค่าโดยใช้การฉีดพึ่งพา
- RightClick ในโครงการและเพิ่มความลับของผู้ใช้ด้วยการกำหนดค่าของ Twilio (SID, Token, Phonenumber)
- การตั้งค่าการฉีดในวิธีการกำหนดค่าบริการของ 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:
แก้ไขวิธีบัญชี/เข้าสู่ระบบเพื่อสร้างและส่งรหัสการยืนยันหลังจากตรวจสอบข้อมูลรับรอง เราไม่ต้องการให้การลงชื่อเข้าใช้เสร็จสมบูรณ์ในขณะนี้ ดังนั้นการเรียกใช้วิธี httpContext.signinasync จะถูกลบออกและเราจะสร้างรหัสการตรวจสอบแบบสุ่มและจัดเก็บ (ปัจจุบันเรากำลังใช้ร้านค้าในหน่วยความจำเพื่อการสาธิต)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model, string button)
จากนั้นเราจะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้า“ VerifyCode” ที่จะทำการตรวจสอบรหัสและเวิร์กโฟลว์ลงชื่อเข้าใช้จะเสร็จสมบูรณ์ ในการดำเนินการ VerifyCode เราเพียงแค่ดึงข้อมูลผู้ใช้และรหัสจากหน่วยความจำและจับคู่กับรหัสที่ให้ไว้
หากรหัสถูกจับคู่แล้วเราก็จะทำตามคำขอการตรวจสอบความถูกต้องโดยการเรียกใช้เมธอด signinasync และเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าที่ได้รับอนุญาต มาเรียกใช้โครงการกันเถอะ ขั้นตอนที่ -1: ผู้ใช้ให้ข้อมูลรับรอง
ขั้นตอนที่ 2: ข้อมูลรับรองได้รับการตรวจสอบและส่งรหัสการตรวจสอบแล้ว:
ขั้นตอนที่ 3: ผู้ใช้ตรวจสอบรหัสที่ถูกต้อง
รหัสขั้นตอนที่ 4 ได้รับการตรวจสอบแล้วและการรับรองความถูกต้อง 2FA เสร็จสมบูรณ์
บทสรุป:
ในบทความนี้เราได้เรียนรู้เกี่ยวกับ 2FA และการใช้งานใน. NET5 โดยใช้ IdentityServer4 และ Twilio คุณสามารถดาวน์โหลดรหัสตัวอย่างที่ใช้ในบทความนี้ได้จาก [repo] นี้ 6 การใช้ SMS สำหรับ 2FA ทำให้ความปลอดภัยของคุณแข็งแกร่งขึ้นอย่างแน่นอน แต่ก็ยังเสี่ยงต่อการ Sim Swap Attacks ดังนั้นนักวิจัยด้านความปลอดภัยจึงสนับสนุนให้ 2FA ใช้วิธีการอื่น ๆ เช่นแอพ Authenticator และปุ่มรักษาความปลอดภัย (Yubikey) ซึ่งไม่สามารถสกัดกั้นบนเครือข่ายโทรศัพท์ได้ เราจะเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ในบทความที่กำลังจะมาถึง - คอยติดตาม!