เปลี่ยนเส้นทางการรับรองความถูกต้องของ Windows ไปยังหน้า 401 ที่กำหนดเอง

เรากำลังแปลงเว็บแอปพลิเคชันบางตัวที่เคยทำงานภายใต้การรับรองความถูกต้องของแบบฟอร์ม ให้ปัจจุบันทำงานเป็นการรับรองความถูกต้องของ Windows ฉันต้องการสร้างความปลอดภัยของเพจขึ้นมาใหม่ซึ่งมีการรับรองความถูกต้องของแบบฟอร์ม โดยมีการแก้ไขเพจจริงขั้นต่ำ ฉันสามารถสร้างเอฟเฟกต์ที่ต้องการขึ้นมาใหม่ได้ด้วยเว็บแอปที่เรียบง่าย ฉันกำลังเรียกใช้แอปบนไปป์ไลน์รวม Server 2008 R2 IIS 7.5

ฉันสร้างแอป 3 หน้าอย่างง่ายโดยใช้การรับรองความถูกต้องของ Windows สามหน้าคือ:

  • Openpage.aspx ที่เปิดให้ผู้ใช้ที่ได้รับการรับรองความถูกต้องทุกคน
  • Blockedpage.aspx ที่ถูกบล็อกสำหรับผู้ใช้ทั้งหมด (สัญลักษณ์ของไดเร็กทอรีหรือเพจที่จะถูกบล็อกไปยังกลุ่มย่อยของผู้ใช้ตามบทบาทของผู้ใช้)
  • ErrorPage.aspx หากมีการเข้าถึง blockedpage.aspx (และถูกปฏิเสธ) แอปพลิเคชันควรส่งต่อไปยัง ErrorPage.aspx ซึ่งผู้ใช้จะได้รับข้อมูลทั่วไปเกี่ยวกับแอปพลิเคชัน

Web.Config สำหรับแอป:

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
      <authentication mode="Windows"/>
      <authorization>
        <deny users="?" />
        <allow users="*" />
      </authorization>
    </system.web>
  <location path="blockedpage.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
  <system.webServer>
   <httpErrors errorMode="Custom" >
      <remove statusCode="401" subStatusCode="-1" />
      <error statusCode="401" path="/development/simplesecurityapp/errorpage.aspx" responseMode="ExecuteURL" />
    </httpErrors>

    <validation validateIntegratedModeConfiguration="false" />
    <defaultDocument>
      <files>
        <clear />
        <add value="openpage.aspx" />
      </files>
    </defaultDocument>
  </system.webServer>

</configuration>

(หากฉันไม่พยายามเปลี่ยนเส้นทางข้อผิดพลาด 401 ในระดับ asp.net ฉันจะได้รับข้อความมาตรฐาน “ไม่ได้รับอนุญาต” ซึ่งไม่ใช่ผลกระทบที่ฉันต้องการให้กับผู้ใช้)

อย่างไรก็ตาม ฉันได้รับข้อผิดพลาดที่ฉันไม่เข้าใจ ทุกครั้งที่เซิร์ฟเวอร์รีเซ็ต แอปจะหยุดทำงาน IIS เพียงส่งคืนข้อผิดพลาด 401 จนกว่าเบราว์เซอร์จะแสดงการควบคุมการเข้าสู่ระบบด้วยตนเองซึ่งไม่สามารถตอบสนองได้ (ฉันไม่ต้องการให้ผู้ใช้ของฉันเห็นพรอมต์การลงชื่อเข้าใช้เบราว์เซอร์)

อย่างไรก็ตาม หากฉันแทนที่ส่วน httperrors เมื่อตั้งค่าแอปพลิเคชันแล้ว (โดยการแก้ไขการกำหนดค่าเว็บหรืออัปเดตด้วยเซิร์ฟเวอร์ GUI) ลบส่วนดังกล่าว เข้าถึงหน้า และจากนั้นเพิ่มส่วนกลับ แอปพลิเคชันจะเริ่มทำงาน ตามที่คาดไว้ และดำเนินต่อไปจนกว่าเซิร์ฟเวอร์จะรีบูต ซึ่งในเวลานั้นเซิร์ฟเวอร์จะเริ่มให้ป๊อปอัปการเข้าสู่ระบบด้วยตนเองแก่ผู้ใช้อีกครั้ง ซึ่งไม่สามารถแก้ไขได้

1) นี่เป็นวิธีที่ถูกต้องในการรักษาความปลอดภัยแอปด้วยการรับรองความถูกต้องของ Windows หรือไม่ (มีวิธีที่ดีกว่าในการกำหนดค่าไดเรกทอรีที่ไม่สามารถเข้าถึงได้เหมือนในรูปแบบ แต่ยังให้หน้าข้อผิดพลาดที่กำหนดเองหรือไม่)

2) นี่เป็นผลกระทบของไปป์ไลน์แบบรวมหรือไม่ และเหตุใดจึงทำงานในลักษณะนี้


person Jim    schedule 30.01.2012    source แหล่งที่มา


คำตอบ (1)


คุณกำลังพยายามจัดเตรียมเนื้อหาผ่านข้อความแสดงข้อผิดพลาดในการขนส่ง

แบบฟอร์มช่วยให้คุณทำเช่นนี้ได้เพราะมันประกอบด้วยเลเยอร์ 7 เช่น 302 และ 200 เบราว์เซอร์ไคลเอนต์ตีความ 401s ว่า "เซิร์ฟเวอร์ไม่ชอบข้อมูลประจำตัวของฉัน ดังนั้นให้เปิดกล่องโต้ตอบเพื่อขออันใหม่"

หน้าที่ได้รับการรับรองความถูกต้องจะสร้างอย่างน้อย 1 401 เพื่อให้ได้รับการรับรองความถูกต้อง การที่คุณกำลังโหลด "ข้อผิดพลาด" มากเกินไปสำหรับสิ่งอื่นอาจเป็นสาเหตุของปัญหา

ฉันไม่แน่ใจว่ามีวิธีที่หรูหราในการทำสิ่งที่คุณต้องการ

person TristanK    schedule 13.03.2012