ไซต์ ASP.NET MVC ซึ่งอนุญาตให้ผู้ใช้ที่ไม่ระบุชื่อ แต่เมื่อเข้าสู่ระบบทำงานเป็นข้อมูลประจำตัวโฆษณาของผู้ใช้ที่เข้าสู่ระบบ

ฉันมีไซต์ ASP.NET MVC 5 ที่ใช้การรับรองความถูกต้องของแบบฟอร์มผ่านคลาสสมาชิกที่กำหนดเอง

ขั้นตอนการเข้าสู่ระบบเว็บไซต์ของฉัน:

  1. ผู้เยี่ยมชมที่ไม่ระบุชื่อพยายามนำทางไปยังไซต์ของฉัน เขาได้รับอนุญาตให้ทำเช่นนั้น แต่ถูกเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบของฉัน

  2. ผู้เยี่ยมชมกรอกชื่อผู้ใช้และรหัสผ่านของเขา ซึ่งกำหนดค่าไว้ใน Active Directory (AD) ของเครือข่ายของฉัน

  3. รหัส .NET AD ตรวจสอบข้อมูลรับรอง จากนั้นตอบสนองด้วยคุกกี้สำหรับผู้เยี่ยมชมที่มีข้อมูลพื้นฐาน (ชื่อของเขา ที่อยู่อีเมล ฯลฯ)
  4. ผู้เยี่ยมชมถูกเปลี่ยนเส้นทางไปยังหน้าแรก เขาได้รับการรับรองความถูกต้องแล้ว แต่จริง ๆ แล้วไซต์ทำงานเป็นข้อมูลประจำตัวของพูลแอป ไม่ใช่ข้อมูลประจำตัว AD ของผู้ใช้ที่เข้าสู่ระบบ

ปัญหาของฉัน: ใน #4 ฉันจะทำให้ข้อมูลประจำตัวของไซต์ของฉันทำงานเป็นข้อมูลประจำตัว AD ของผู้ใช้ที่ผ่านการรับรองความถูกต้อง แทนที่จะเป็นข้อมูลประจำตัวของกลุ่มแอปของเว็บไซต์ได้อย่างไร ฉันต้องทำเช่นนี้เพราะบริการบางอย่างที่แอปของฉันใช้ต้องใช้ข้อมูลระบุตัวตนของผู้ใช้ AD ไม่ใช่ข้อมูลระบุตัวตนของกลุ่มแอป

วิธีแก้ไขที่เป็นไปได้: ใน #2 ฉันได้รับชื่อผู้ใช้และรหัสผ่านของผู้เข้าชม และใช้ข้อมูลดังกล่าวเพื่อตรวจสอบว่าเขามีตัวตนโฆษณาที่ถูกต้อง ฉันสามารถเข้ารหัสและบันทึกรหัสผ่านของผู้ใช้ได้ จากนั้นเมื่อใดก็ตามที่ฉันต้องการใช้บริการที่ต้องใช้ข้อมูลระบุตัวตน AD ของผู้ใช้ ฉันสามารถสร้าง NetworkCredential ใหม่จากชื่อผู้ใช้และรหัสผ่านของเขาได้ ฉันไม่ชอบวิธีแก้ปัญหานี้ เพราะว่าฉันไม่อยากเก็บรหัสผ่านของผู้ใช้ไว้ หากสามารถหลีกเลี่ยงได้

ขอบคุณสำหรับความช่วยเหลือ!


person David Alan Condit    schedule 19.04.2019    source แหล่งที่มา
comment
คุณต้องใช้การแอบอ้างบุคคลอื่น ฉันได้สร้างแอพแบบนั้นมากมาย ใช้การแอบอ้างบุคคลอื่นตลอดเวลาหรือเฉพาะในช่วงเวลาที่จำเป็นเท่านั้น ยิ่งสั้นก็ยิ่งดีเพื่อความปลอดภัย ดูคำถามนี้หรือค้นคว้าทางออนไลน์   -  person CodingYoshi    schedule 19.04.2019
comment
หากฉันใช้การแอบอ้างบุคคลอื่นในช่วงเวลาสั้นๆ ฉันจะต้องบันทึกรหัสผ่านของผู้ใช้ลงในคุกกี้ของเขา (เข้ารหัส) เพื่อที่ฉันจะสามารถแอบอ้างเป็นข้อมูลประจำตัวของเขาได้เมื่อฉันต้องการใช้บริการที่จำเป็นต้องใช้ มิฉะนั้น ฉันจะปลอมตัวเป็นเซสชันทั้งหมดของเขาได้อย่างไร ตั้งแต่เวลาที่เขาเข้าสู่ระบบจนถึงเวลาที่เขาออกหรือคุกกี้ของเขาหมดอายุ?   -  person David Alan Condit    schedule 19.04.2019
comment
ดูว่าสิ่งนี้ให้อะไรแก่คุณ: (System.Security.Principal.WindowsIdentity)User.Identity แล้วคุณจะได้สิ่งที่ฉันหมายถึง   -  person CodingYoshi    schedule 19.04.2019
comment
นั่นแค่ส่งคืนตัวตนที่ไม่เปิดเผยตัวตน web.config ของฉันคือสิ่งนี้ ดังนั้นบางทีฉันอาจจะพูดผิดเมื่อฉันบอกว่ามันเป็นการรับรองความถูกต้องของแบบฟอร์ม โดยพื้นฐานแล้วมันใช้งานได้เหมือนกับการรับรองความถูกต้องของแบบฟอร์ม แต่ในทางเทคนิคแล้วตั้งค่าเป็น Windows IIS เปิดใช้งาน Windows Idenity, Impersonation และ Anonymous เชื่อมต่อตามที่ส่งผ่านตามข้อมูลประจำตัวของพูลแอป ‹โหมดการรับรองความถูกต้อง=Windows›‹/การรับรองความถูกต้อง› ‹การปลอมตัวระบุตัวตน=true /›   -  person David Alan Condit    schedule 19.04.2019
comment
ฉันเชื่อว่าสิ่งที่คุณหมายถึงจริงๆ คือ: var currentWindowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent(); ซึ่งส่งคืน MyADDomain\MyAppPoolIdentityName   -  person David Alan Condit    schedule 19.04.2019
comment
คุณได้ทำการวิจัยหรือไม่? โปรดดูสิ่งนี้   -  person CodingYoshi    schedule 19.04.2019
comment
ใช่. จากลิงก์แรกของคุณ ดูเหมือนว่าฉันต้องกำหนดค่าเซิร์ฟเวอร์ IIS ของฉันสำหรับการมอบหมาย เพื่อให้สามารถส่งผ่านข้อมูลรับรอง AD ของผู้เยี่ยมชมได้ บางทีวิธีแก้ปัญหาที่ดีกว่าอาจเป็น สิ่งนี้ ซึ่งดูเหมือนว่าจะอนุญาตให้ฉันแอบอ้างเป็นผู้ใช้โดยใช้ชื่อผู้ใช้หลักของเขา ฉันไม่จำเป็นต้องบันทึกรหัสผ่านของเขาด้วยวิธีนี้   -  person David Alan Condit    schedule 19.04.2019
comment
ฉันไม่เคยต้องเก็บรหัสผ่าน   -  person CodingYoshi    schedule 19.04.2019