Sự cố xác thực khi gỡ lỗi trong VS2013 - iis express


103

Tôi đang cố gắng lấy tên người dùng windows khi gỡ lỗi trong Visual Studio 2013. Tôi chỉ đang sử dụng:

httpcontext.current.user.identity.name

Nếu tôi chạy điều này trên Máy chủ nhà phát triển của mình, nó hoạt động tốt, nếu tôi chạy nó ở chế độ gỡ lỗi trên bất kỳ phiên bản Visual Studio nào trước đó, nó cũng hoạt động tốt.

Vấn đề của tôi là - Nếu tôi chạy điều này trên visual studio 2013, tôi nhận được một chuỗi trống.

Cấu hình web của tôi như sau.

<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>

Câu trả lời:


215

Tôi vừa nâng cấp lên VS 2013 từ VS 2012 và danh tính người dùng hiện tại (HttpContext.User.Identity) được chuyển sang dạng ẩn danh.

Tôi đã thử thay đổi applicationhost.config của IIS express, không có gì khác biệt.

Giải pháp là xem các thuộc tính của dự án web, nhấn F4 để lấy các thuộc tính của dự án khi bạn đã chọn cấp cao nhất của dự án. Đừng nhấp chuột phải vào dự án và chọn thuộc tính, đây là một cái gì đó hoàn toàn khác.

Thay đổi Xác thực Ẩn danh thành Vô hiệu hóa và Xác thực Windows thành Bật.

Hoạt động như nước thịt :)


10
Cảm ơn vì điều đó. Tôi không thể tin rằng họ đã thêm điều đó như một 'sự nâng cao'. Đó là những gì web.config dành cho. Bây giờ chúng tôi không thể tin tưởng những gì chúng tôi thấy trong web.config. Xuất sắc.
Trucker_jim

4
Tôi tin rằng đây là một cách tiếp cận tốt hơn so với câu trả lời được chấp nhận, vì nó sẽ không ảnh hưởng đến ứng dụng khác đang chạy trên IIS Express.
niaher

Cảm ơn nhiều. Điều đó đã làm điều đó cho tôi! Là một Dự án Visual Studio 2008 Tôi đã nâng cấp lên Visual Studio 2013.
Rob K.

Trong VS 2012, tôi đã sử dụng: "Sử dụng Máy chủ Phát triển Visual Studio". Vì vậy, một nâng cấp và điều này đã hoạt động. Mặc dù bây giờ nó chạy IIS Express.
Thomas Koelle

Cái này nên là câu trả lời được chấp nhận, nếu bạn vừa nâng cấp lên VS 2013.
Nishant

130

Khi tôi đang nghiên cứu điều này, tôi đã tìm thấy câu trả lời của mình, nhưng không thể tìm thấy câu trả lời trên internet, vì vậy tôi nghĩ rằng tôi sẽ chia sẻ điều này:

Tôi đã khắc phục sự cố của mình bằng cách sửa đổi tệp applicationhost.config của mình. Tệp của tôi đã được lưu trong thư mục "\ My Documents \ IISExpress \ config".

Có vẻ như VS2013 đã bỏ qua tệp web.config của tôi và áp dụng các phương pháp xác thực khác nhau.

Tôi đã phải sửa đổi phần này của tệp để trông giống như bên dưới. Trên thực tế, tôi chỉ sửa đổi Chế độ xác thực nặc danh thành sai và chế độ Xác thực cửa sổ thành 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
Tôi phải làm điều này để gỡ lỗi trong VS2013 bằng IIS Express hoạt động ổn định. Nếu không có điều này, dường như hoạt động OK một lần, sau đó 401 sau đó. (1) Có lệnh AppCmd ​​sẽ thay đổi tệp applicationhost.config và (2), F4 trên Dự án web cho phép tôi tắt Xác thực ẩn danh và bật Windows Auth. Làm điều đó trong VS2012 hoạt động tốt, trong VS2013 không tạo ra môi trường nhà phát triển miễn phí 401.
IanT8

4
@Neil, bạn đã cứu một ngày của tôi. BTW: Không cần thiết phải tắt anonymousAuthentication. Nó là đủ để bật windowsAuthentication. Các cài đặt này kiểm soát cơ chế xác thực nào mà các trang web được phép sử dụng.
chiccodoro

+1 cũng như ... đã cố gắng giải quyết vấn đề khó chịu này trong một thời gian với hiện tượng IISExpress địa phương của tôi
Jeff Lewis

À, đó là cách làm. Thiên tài. Cảm ơn vì mẹo này, thực sự hữu ích!
Mike Gledhill

1
Tôi đã phải xóa "Thương lượng" để có thể kiểm tra lệnh gọi dịch vụ web (với WSE3) mà không nhận được số 401.
Wolf5 2/1214

41

Trong Visual Studio 2013 VÀ VS15 (nhưng tôi đoán nếu giống nhau cho tất cả các phiên bản khác) chỉ cần nhấn F4 và thay đổi hai thuộc tính này: - Xác thực ẩn danh: Tắt - Xác thực Windows: Bật


1
Cảm ơn vì điều đó. Tôi không thể tin rằng họ đã thêm điều đó như một 'sự nâng cao'. Đó là những gì web.config dành cho. Bây giờ chúng tôi không thể tin tưởng những gì chúng tôi thấy trong web.config. Xuất sắc.
Trucker_jim

1
Bạn vừa cứu tôi khỏi quá trình quay lại Visual Studio 2010!
Julien P

2
Cant tin rằng đây không phải là câu hỏi / câu trả lời số 1 trong số tất cả các bài đăng SO này, những người tiếp tục nói về cài đặt IIS
Đã mất

38

Trong VS2013 F4 trên dự án của bạn để xem cửa sổ thuộc tính và vô hiệu hóa quyền truy cập Ẩn danh và bật "Xác thực Windows"

Sau đó, nó sẽ hoạt động. Không cần thay đổi bất cứ điều gì khác


Thật thất vọng, tùy chọn này tồn tại khi bạn muốn gỡ lỗi một dự án web, nhưng không tồn tại cho các dự án Dịch vụ. Grrrr ...
Mike Gledhill

9

VS 2015 thay đổi điều này. Nó đã thêm một thư mục .vs vào dự án web của tôi và applicationhost.config ở trong đó. Tôi đã thực hiện các thay đổi được đề xuất (xác thực cửa sổ = true, anon = false) và nó bắt đầu cung cấp tên người dùng thay vì trống.


8

Mở tệp applicationHost.config nằm trong thư mục C: \ Users [userid] \ Documents \ IISExpress \ config. Bên trong tệp này, thay đổi overrideModeDefault của nặc danhAthentication và windowsAuthentication thành "Cho phép"

 <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>

Tiếp theo thay đổi lockItem thành "false" cho AnonymousAuthenticationModule và 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" />

Việc thực hiện những thay đổi này sẽ cho phép cài đặt cấu hình web hiện có ghi đè những gì có trong tệp applicationHost cho IIS Express.


1
Những thay đổi này cộng với đăng xuất đã làm việc cho tôi. Có điều gì đó được lưu vào bộ nhớ đệm, vì việc dừng IIS Express từ biểu tượng thông báo và khởi động lại VS không hoạt động. Lỗi này thực sự khó chịu, nó xảy ra vài tháng hoặc nửa năm một lần khi một máy ảo hoặc PC của nhà phát triển mới được xây dựng. Nó luôn gây ra mất đến nửa ngày, làm rối tung các cài đặt. Vấn đề là mặc dù các cài đặt này nên sửa chữa nó ngay lập tức, nó không và sau khi chơi xung quanh nó đột nhiên hoạt động, rất lạ và tôi không thích điều đó. Một logoff sau đó được khuyến khích. Lần tới khi nó xảy ra, tôi sẽ cố gắng cô lập, nhưng đây là một mặc định rất khó chịu.
Tony Wall,

6

Bạn cũng có thể sửa đổi các thuộc tính dự án cho dự án web của mình, chọn "Web" từ các tab bên trái, sau đó thay đổi menu Máy chủ thả xuống thành "Local IIS". Tạo một thư mục ảo mới và sử dụng trình quản lý IIS để thiết lập nhóm trang web / ứng dụng của bạn như mong muốn.

Tôi thích phương pháp này hơn, vì bạn thường có một thư mục v IIS cục bộ (hoặc trang web) để kiểm tra cục bộ. Bạn cũng sẽ không ảnh hưởng đến bất kỳ trang web nào khác theo cách này.

Thuộc tính dự án web


1

Có vẻ như câu trả lời đúng được cung cấp bởi user3149240 ở trên. Tuy nhiên, Như Neil Watson đã chỉ ra, tệp applicationhost.config đang hoạt động ở đây.

Các thay đổi thực sự có thể được thực hiện trong ngăn Thuộc tính VS hoặc trong tệp mặc dù ở một vị trí khác. Gần cuối tệp applicationhost.config là một tập hợp các phần tử vị trí. Mỗi ứng dụng cho IIS Express dường như có một trong những ứng dụng này. Thay đổi cài đặt trong giao diện người dùng sẽ cập nhật phần này của tệp. Vì vậy, bạn có thể thay đổi cài đặt thông qua giao diện người dùng hoặc sửa đổi tệp này.

Dưới đây là một ví dụ khi tắt xác thực ẩn danh và bật xác thực Windows:

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

Điều này tương đương trong VS UI với:

Anonymous Authentication: Disabled
Windows Authentication: Enabled

Trong VS hiện tại, điều này không hoạt động, nó sẽ luôn nói rằng nó bị khóa ngay cả khi các mô-đun applicationhost.config đã được mở khóa trong cả tài liệu người dùng và đường dẫn giải pháp .vs / config. Ngoài ra, đây là nơi duy nhất không đúng, các cài đặt từ cửa sổ thuộc tính thực sự được lưu trữ trong XML của dự án web VS. Nhưng nó không quan trọng bởi vì thay đổi chúng cũng không giúp ích gì, applicationhost luôn ghi đè. Đăng xuất là cần thiết để những thay đổi đó hoạt động, vậy thôi.
Tony Wall,

0

F4 không phải lúc nào cũng đưa tôi đến bảng điều khiển này. Bên cạnh đó, người ta thường cho rằng một bức tranh có giá trị ngàn lời nói.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.