401 - ไม่ได้รับอนุญาตบน Server 2008 R2 IIS 7.5


20

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

401 - Unauthorized: Access is denied due to invalid credentialsจากระยะไกลจะช่วยให้ข้อผิดพลาดนี้: (remote = เดสก์ท็อปบน 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 Manager -> หน้าข้อผิดพลาด -> แก้ไขการตั้งค่าคุณสมบัติDetailed Errorsแอปจะทำงานจากระยะไกล การไม่ทิ้งสิ่งนี้ไว้ดังนั้นปัญหายังไม่ได้รับการแก้ไข แต่มันทำให้สับสนมากขึ้น

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

อัปเดต # 3เล่นกับการติดตามคำขอที่ล้มเหลวนี่คือการติดตามคำขอคำเตือนที่เป็นสาเหตุของ 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

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

@vivek ดูการอัปเดตล่าสุดของฉัน
mxmissile

ARRG !!! ได้ แต่โดยสิ่งนี้อีกครั้ง! 2 ชั่วโมงก็เสียเวลาค้นหาHtml.RenderActionแล้วก็ใช้มีดโกนHtml.Actionเพื่อให้การค้นหาครั้งแรกของฉันว่างเปล่า
mxmissile

โอ้มันสองสามปีเดาอะไร เพิ่งเสียเวลา 3 ชั่วโมงในเช้านี้อีกครั้ง! เมื่อไหร่ฉันจะเรียนรู้?!?!?!
mxmissile

คำตอบ:


19

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


1
นี่เป็นปัญหาของฉันมันน่าหงุดหงิดพอที่จะชกต่อยหมีแพนด้า ขอบคุณ mxmissile
Khalid Abuhakmeh

4

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

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

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


4

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


4

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

  1. คลิกไซต์ใน IIS
  2. คลิกสองครั้งที่การรับรองความถูกต้อง
  3. คลิกขวาและเลือกการตั้งค่าขั้นสูง
  4. ยกเลิกการเลือก "Enable Kernel-mode authentication"

2

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

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

หวังว่าจะช่วย


1
อนุญาต - ผู้ใช้ทั้งหมด - รับมา
mxmissile
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.