ปัญหาการพิสูจน์ตัวตนเมื่อทำการดีบักใน VS2013 - iis express


103

ฉันกำลังพยายามรับชื่อผู้ใช้ windows เมื่อทำการดีบักใน Visual Studio 2013 ฉันใช้:

httpcontext.current.user.identity.name

ถ้าฉันเรียกใช้สิ่งนี้บนเซิร์ฟเวอร์ Dev ของฉันมันใช้งานได้ดีถ้าฉันเรียกใช้ในโหมดดีบักใน Visual Studio เวอร์ชันก่อนหน้ามันก็ใช้งานได้ดีเช่นกัน

ปัญหาของฉันคือ - ถ้าฉันเรียกใช้สิ่งนี้ใน Visual Studio 2013 ฉันได้รับสตริงว่างเปล่า

การกำหนดค่าเว็บของฉันมีดังนี้

<system.web>
    <authentication mode="Windows"/>
    <identity impersonate="false"/>
    <authorization>
       <allow users="*"/>
    </authorization>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    <customErrors mode="Off"/>
</system.web>

คำตอบ:


215

ฉันเพิ่งอัปเกรดเป็น VS 2013 จาก VS 2012 และข้อมูลประจำตัวของผู้ใช้ปัจจุบัน (HttpContext.User.Identity) ผ่านมาในรูปแบบไม่ระบุตัวตน

ฉันลองเปลี่ยน IIS express applicationhost.config แล้วไม่มีความแตกต่าง

วิธีแก้ปัญหาคือดูคุณสมบัติของโครงการเว็บกด F4 เพื่อรับคุณสมบัติโครงการเมื่อคุณเลือกระดับบนสุดของโปรเจ็กต์แล้ว อย่าคลิกขวาที่โครงการและเลือกคุณสมบัตินี่คือสิ่งที่แตกต่างอย่างสิ้นเชิง

เปลี่ยน Anonymous Authentication เป็น Disabled และ Windows Authentication เป็น Enabled

ทำงานเหมือนน้ำเกรวี่ :)


10
ขอบคุณสำหรับสิ่งนั้น ฉันไม่อยากจะเชื่อเลยว่าพวกเขาได้เพิ่มสิ่งนั้นเป็น 'การปรับปรุง' นั่นคือสิ่งที่ web.config มีไว้สำหรับ ตอนนี้เราไม่สามารถเชื่อถือสิ่งที่เราเห็นใน web.config ยอดเยี่ยม.
trucker_jim

4
ฉันเชื่อว่านี่เป็นแนวทางที่ดีกว่าคำตอบที่ยอมรับเนื่องจากจะไม่ส่งผลกระทบต่อแอปพลิเคชันอื่น ๆ ที่ทำงานบน IIS Express
niaher

ขอบคุณมาก นั่นก็เพื่อฉันเช่นกัน! เป็นโครงการ Visual Studio 2008 ที่ฉันอัปเกรดเป็น Visual Studio 2013
Rob K.

ใน VS 2012 ฉันใช้: "ใช้ Visual Studio Development Server" ดังนั้นการอัปเกรดและสิ่งนี้ได้ผล แม้ว่าตอนนี้จะเรียกใช้ IIS Express
Thomas Koelle

คำตอบนี้น่าจะเป็นคำตอบที่ได้รับการยอมรับหากคุณเพิ่งอัปเกรดเป็น VS 2013
Nishant

130

ในขณะที่ฉันกำลังค้นคว้าสิ่งนี้ฉันพบคำตอบของฉัน แต่ไม่พบคำตอบบนอินเทอร์เน็ตฉันจึงคิดว่าจะแบ่งปันสิ่งนี้:

ฉันแก้ไขปัญหาของฉันโดยการแก้ไขไฟล์ applicationhost.config ของฉัน ไฟล์ของฉันถูกบันทึกไว้ในโฟลเดอร์ "\ My Documents \ IISExpress \ config"

ดูเหมือนว่า VS2013 จะไม่สนใจไฟล์ web.config ของฉันและใช้วิธีการตรวจสอบสิทธิ์ที่แตกต่างกัน

ฉันต้องแก้ไขส่วนนี้ของไฟล์ให้ดูเหมือนด้านล่าง ในความเป็นจริงฉันแก้ไข anonymousAuthentication เป็นเท็จและโหมด windowsAuthentication เป็น true เท่านั้น

<authentication>

  <anonymousAuthentication enabled="false" userName="" />

  <basicAuthentication enabled="false" />

  <clientCertificateMappingAuthentication enabled="false" />

  <digestAuthentication enabled="false" />

  <iisClientCertificateMappingAuthentication enabled="false">
  </iisClientCertificateMappingAuthentication>

  <windowsAuthentication enabled="true">
    <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>

</authentication>

2
ฉันต้องทำสิ่งนี้เพื่อแก้จุดบกพร่องใน VS2013 โดยใช้ IIS Express เพื่อให้ทำงานได้อย่างน่าเชื่อถือ หากไม่มีสิ่งนี้ดูเหมือนว่าจะทำงานได้ดีหนึ่งครั้งจากนั้น 401 หลังจากนั้น (1) มีคำสั่ง AppCmd ​​ที่จะเปลี่ยนไฟล์ applicationhost.config และ (2), F4 บน Web Project ให้ฉันปิด Anonymous Auth และ Windows Auth on การทำเช่นนั้นใน VS2012 ทำงานได้ดีใน VS2013 ไม่ได้สร้างสภาพแวดล้อมการพัฒนาฟรี 401
IanT8

4
@ นีลคุณบันทึกวันของฉัน BTW: anonymousAuthenticationมันไม่จำเป็นที่จะปิด windowsAuthenticationมันจะเพียงพอที่จะเปิด การตั้งค่าเหล่านี้ควบคุมกลไกการตรวจสอบสิทธิ์ที่เว็บไซต์ได้รับอนุญาตให้ใช้
chiccodoro

+1 เช่นกัน ... พยายามแก้ไขปัญหาที่จู้จี้นี้มาระยะหนึ่งแล้วโดยใช้ IISExpress ในพื้นที่ของฉัน
Jeff Lewis

อ่านั่นเป็นวิธีการทำ อัจฉริยะ. ขอบคุณสำหรับเคล็ดลับนี้มีประโยชน์จริงๆ!
Mike Gledhill

1
ฉันต้องลบ "Negotiate" เพื่อให้สามารถทดสอบการเรียกใช้บริการเว็บ (กับ WSE3) โดยไม่ได้รับ 401
Wolf5

41

ใน Visual Studio 2013 และ VS15 (แต่ฉันเดาว่าเหมือนกันสำหรับเวอร์ชันอื่น ๆ ทั้งหมดหรือไม่) เพียงแค่กด F4 และเปลี่ยนคุณสมบัติทั้งสองนี้: - การรับรองความถูกต้องแบบไม่ระบุชื่อ: ปิดใช้งาน - การรับรองความถูกต้องของ Windows: เปิดใช้งาน


1
ขอบคุณสำหรับสิ่งนั้น ฉันไม่อยากจะเชื่อเลยว่าพวกเขาได้เพิ่มสิ่งนั้นเป็น 'การปรับปรุง' นั่นคือสิ่งที่ web.config มีไว้สำหรับ ตอนนี้เราไม่สามารถเชื่อถือสิ่งที่เราเห็นใน web.config ยอดเยี่ยม.
trucker_jim

1
คุณเพิ่งช่วยฉันจากการย้อนกลับไปยัง Visual Studio 2010!
Julien P

2
ไม่อยากจะเชื่อเลยว่านี่ไม่ใช่เควส # 1 / คำตอบจากโพสต์ SO เหล่านี้ที่พูดถึงการตั้งค่า IIS
หายไป

38

ใน VS2013 F4 บนโปรเจ็กต์ของคุณเพื่อดูหน้าต่างคุณสมบัติและปิดใช้งานการเข้าถึงแบบไม่ระบุชื่อและเปิดใช้งาน "การพิสูจน์ตัวตนของ Windows"

จากนั้นมันจะทำงาน ไม่ต้องเปลี่ยนอะไรอีก


น่าผิดหวังตัวเลือกนี้มีอยู่เมื่อคุณต้องการดีบักโปรเจ็กต์เว็บ แต่ไม่มีอยู่สำหรับโปรเจ็กต์บริการ Grrrr ...
Mike Gledhill

9

VS 2015 เปลี่ยนแปลงสิ่งนี้ มันเพิ่มโฟลเดอร์. vs ในโครงการเว็บของฉันและ applicationhost.config อยู่ในนั้น ฉันทำการเปลี่ยนแปลงตามที่แนะนำ (window authentication = true, anon = false) และมันเริ่มส่งชื่อผู้ใช้แทนที่จะเป็นช่องว่าง


8

เปิดไฟล์ applicationHost.config ที่อยู่ในโฟลเดอร์ C: \ Users [userid] \ Documents \ IISExpress \ config ภายในไฟล์นี้เปลี่ยน overrideModeDefault ของ anonymousAthentication และ windowsAuthentication เป็น "Allow"

 <sectionGroup name="security">
                <section name="access" overrideModeDefault="Deny" />
                <section name="applicationDependencies" overrideModeDefault="Deny" />
                <sectionGroup name="authentication">
                    <section name="anonymousAuthentication" overrideModeDefault="Allow" />
                    <section name="basicAuthentication" overrideModeDefault="Deny" />
                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="digestAuthentication" overrideModeDefault="Deny" />
                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="windowsAuthentication" overrideModeDefault="Allow" />
                </sectionGroup>

ถัดไปเปลี่ยน lockItem เป็น "false" สำหรับ AnonymousAuthenticationModule และ WindowsAuthenticationModule

  <system.webServer>
            <modules>
                <!--
                <add name="HttpCacheModule" lockItem="true" />
-->
                <add name="DynamicCompressionModule" lockItem="true" />
                <add name="StaticCompressionModule" lockItem="true" />
                <add name="DefaultDocumentModule" lockItem="true" />
                <add name="DirectoryListingModule" lockItem="true" />
                <add name="IsapiFilterModule" lockItem="true" />
                <add name="ProtocolSupportModule" lockItem="true" />
                <add name="HttpRedirectionModule" lockItem="true" />
                <add name="ServerSideIncludeModule" lockItem="true" />
                <add name="StaticFileModule" lockItem="true" />
                <add name="AnonymousAuthenticationModule" lockItem="false" />
                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
                <add name="UrlAuthorizationModule" lockItem="true" />
                <add name="BasicAuthenticationModule" lockItem="true" />
                <add name="WindowsAuthenticationModule" lockItem="false" />

การเปลี่ยนแปลงเหล่านี้จะทำให้การตั้งค่าการกำหนดค่าเว็บที่มีอยู่สามารถแทนที่สิ่งที่อยู่ในไฟล์ applicationHost สำหรับ IIS Express


1
การเปลี่ยนแปลงเหล่านี้รวมถึงการออกจากระบบใช้ได้ผลสำหรับฉัน มีบางอย่างถูกแคชเนื่องจากการหยุด IIS Express จากไอคอนการแจ้งเตือนและการรีสตาร์ท VS ไม่ทำงาน ข้อผิดพลาดนี้น่ารำคาญมากโดยจะเกิดขึ้นทุก ๆ สองสามเดือนหรือครึ่งปีเมื่อมีการสร้าง VM หรือพีซีสำหรับนักพัฒนาใหม่ มันมักจะทำให้หายไปถึงครึ่งวันโดยยุ่งกับการตั้งค่า ปัญหาคือแม้ว่าการตั้งค่าเหล่านี้ควรแก้ไขทันที แต่ก็ไม่ได้และหลังจากเล่นรอบ ๆ มันก็ใช้งานได้ทันทีแปลกมากและฉันไม่ชอบสิ่งนั้น แนะนำให้ออกจากระบบ ครั้งต่อไปที่เกิดขึ้นฉันจะพยายามแยก แต่นี่เป็นค่าเริ่มต้นที่น่ารำคาญมาก
Tony Wall

6

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

ฉันชอบวิธีนี้เพราะโดยทั่วไปคุณจะมีไดเร็กทอรี IIS v (หรือไซต์) ในเครื่องเพื่อทดสอบในเครื่อง คุณจะไม่ส่งผลกระทบต่อไซต์อื่น ๆ ด้วยวิธีนี้

คุณสมบัติโครงการเว็บ


1

ดูเหมือนว่าคำตอบที่ถูกต้องมีให้โดย user3149240 ด้านบน อย่างไรก็ตามตามที่ Neil Watson ชี้ให้เห็นไฟล์ applicationhost.config อยู่ที่นี่

การเปลี่ยนแปลงสามารถทำได้ในบานหน้าต่างคุณสมบัติ VS หรือในไฟล์แม้ว่าจะอยู่ในจุดอื่น บริเวณด้านล่างของไฟล์ applicationhost.config คือชุดขององค์ประกอบตำแหน่ง ดูเหมือนว่าแต่ละแอปสำหรับ IIS Express จะมีหนึ่งในนั้น การเปลี่ยนการตั้งค่าใน UI จะอัปเดตส่วนนี้ของไฟล์ ดังนั้นคุณสามารถเปลี่ยนการตั้งค่าผ่าน UI หรือแก้ไขไฟล์นี้

นี่คือตัวอย่างที่ปิดการตรวจสอบความถูกต้องโดยไม่ระบุตัวตนและเปิด Windows auth:

<location path="MyApp">
    <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>

สิ่งนี้เทียบเท่าใน VS UI เพื่อ:

Anonymous Authentication: Disabled
Windows Authentication: Enabled

ใน VS ปัจจุบันสิ่งนี้ใช้ไม่ได้มันมักจะบอกว่ามันถูกล็อคแม้ว่าโมดูล applicationhost.config จะถูกปลดล็อคทั้งในเอกสารผู้ใช้และพา ธ โซลูชัน. vs / config นอกจากนี้ยังไม่เป็นความจริงที่นี่เป็นที่เดียวการตั้งค่าจากหน้าต่างคุณสมบัติจะถูกเก็บไว้ใน XML ของโครงการเว็บ VS แต่มันไม่สำคัญเพราะการเปลี่ยนมันก็ไม่ได้ช่วยอะไรแอปพลิเคชันโฮสต์จะแทนที่เสมอ จำเป็นต้องออกจากระบบเพื่อให้การเปลี่ยนแปลงเหล่านั้นใช้งานได้นั่นคือทั้งหมดที่
Tony Wall

0

F4 ไม่ได้พาฉันมาที่แผงนี้เสมอไป นอกจากนี้มักกล่าวว่าภาพมีค่าหนึ่งพันคำ

ป้อนคำอธิบายภาพที่นี่

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