ฉันมีเว็บแอปพลิเคชันที่ปรับใช้กับกล่อง Server 2008 IIS 7.5

จากระยะไกลจะทำให้เกิดข้อผิดพลาดนี้: 401 - Unauthorized: Access is denied due to invalid credentials. (รีโมท = เดสก์ท็อปบน LAN เดียวกัน)

ได้ลองใช้ไคลเอนต์ระยะไกลหลายตัวโดยใช้เบราว์เซอร์ที่แตกต่างกัน ผลลัพธ์เหมือนกันทั้งหมด (IE, FF และ Chrome)

กดปุ่มโปรแกรมจากที่สก์ท็อปของเซิร์ฟเวอร์เองทำงานไม่มีที่ติ อย่างไรก็ตาม ฉันไม่ได้ลอง Firebug บนเดสก์ท็อปของเซิร์ฟเวอร์ ฉันจะถือว่ายังคงออกรหัสสถานะ 401 แต่ยังส่งคืนเนื้อหาอยู่ดี ดูอัปเดต # 2

แอปพลิเคชันกำลังใช้การตรวจสอบสิทธิ์แบบไม่ระบุชื่อ

แอปพลิเคชันเขียนด้วย .NET 4.0 Asp.Net โดยใช้กรอบงาน MVC

เนื้อหาแบบคงที่ใช้งานได้ดี เช่นhttp://server.com/content/image.jpg

Sysinternals procmonส่งคืนผลลัพธ์ 2 รายการนี้สำหรับแต่ละคำขอ: FAST IO DISALLOWED และ PATH NOT FOUND

ฉันมีแอป MVC อีก 2 แอปที่ทำงานได้ดีบนเซิร์ฟเวอร์เดียวกัน ฉันได้ตรวจสอบความปลอดภัยในโฟลเดอร์และทุกรายการตรงกัน

แอปทำงานได้ดีบนกล่อง Server 2008 IIS 7.0

ไม่มีอะไรแสดงในบันทึกเหตุการณ์บนเซิร์ฟเวอร์ที่เกี่ยวข้องกับสิ่งนี้

ดึงผมออกมาตรงนี้ มีเคล็ดลับการแก้ปัญหาอะไรไหม?

อัปเดต #1 : นี่เป็นแค่ WTF ที่มากขึ้นเมื่อฉันขุด

ถ้าฉันคลิกที่แอปพลิเคชันในตัวจัดการ IIS -> หน้าข้อผิดพลาด -> แก้ไขการตั้งค่าคุณสมบัติ เลือกDetailed Errorsแอปจะทำงานจากระยะไกล ไม่ได้ปล่อยไว้อย่างนี้ ปัญหายังไม่ได้รับการแก้ไข มันแค่สับสนมากขึ้นเท่านั้น

อัปเดต #2 : เมื่อใช้ Firebug ฉันเห็นว่าสถานะยังคงอยู่401 Unauthorizedแต่การตอบกลับส่งคืน HTML ที่ถูกต้องของแอปพลิเคชัน

อัปเดต #3เล่นกับ Failed Request Tracing นี่คือ WARNING Request Trace ที่ทำให้เกิด 401:

ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401 
HttpReason Unauthorized 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0)

อัปเดต #4บันทึก IIS ปกติแสดงสิ่งนี้:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414
answer

บางครั้งคุณต้องถอยหนึ่งก้าว... สาเหตุของสิ่งนี้คือฉันมีความคิดHtml.RenderAction()ของฉันที่เรียกว่าวิธีการดำเนินการที่ถูกทำเครื่องหมายด้วย[Authorize]แอตทริบิวต์

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

อะไรก็ตามที่กำลังพังมักจะทำงานเป็นข้อมูลประจำตัวของเว็บไซต์ของคุณแทนที่จะเป็นข้อมูลประจำตัวของพูลแอป มิฉะนั้นจะพังในเครื่องและจากระยะไกล คำแนะนำของฉันหากคุณมีการแมปไซต์ 1 ต่อ 1 กับกลุ่มแอป หรือคุณมีสภาพแวดล้อมที่น่าเชื่อถือสูง คือการตั้งค่าบัญชีผู้ใช้ที่ไม่ระบุชื่อเพื่อใช้ข้อมูลประจำตัวของพูลแอป จากนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับผู้ใช้รายที่ 2 ในการบำรุงรักษา

คุณพูดถึงตัวสำรวจกระบวนการ เป็นสิ่งที่ดีสำหรับการค้นหาข้อมูลที่กำลังทำงานอยู่ แต่เครื่องมือที่อาจค้นพบข้อผิดพลาดในการปฏิเสธการเข้าถึงคือ processmon (จาก sysinternals) ลองใช้ ทำซ้ำ และจับภาพ จากนั้นค้นหาคำว่า 'ปฏิเสธ' ควรเปิดปัญหาการปฏิเสธการเข้าถึงใด ๆ บนดิสก์

คุณจะมีพฤติกรรมเดียวกันนี้เมื่อคุณมีตัวกรองสำหรับการอนุญาตแบบกำหนดเองที่สืบทอดมาจากAuthorizeAttributeและการเรียกOnAuthorizationใช้เมธอดอย่างน้อยหนึ่งครั้ง โดยหนึ่งในนั้นตั้งค่าAuthorizationContext.Resultเป็น `HttpUnauthorizedResult'

ด้วยเหตุผลบางอย่างสิ่งนี้ได้แก้ไขปัญหาของฉัน

  1. คลิกไซต์ใน IIS
  2. ดับเบิลคลิกการรับรองความถูกต้อง
  3. คลิกขวาและเลือกการตั้งค่าขั้นสูง
  4. ยกเลิกการเลือก "เปิดใช้งานการพิสูจน์ตัวตนโหมดเคอร์เนล"

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

จากนั้นใน "การตรวจสอบสิทธิ์" ตรวจสอบให้แน่ใจว่าไม่มีข้อขัดแย้งและเปิดใช้งานเฉพาะการตรวจสอบสิทธิ์แบบไม่ระบุชื่อเท่านั้น

หวังว่าจะช่วยได้