Problem z uwierzytelnianiem podczas debugowania w VS2013 - iis Express

103

Próbuję pobrać nazwę użytkownika systemu Windows podczas debugowania w programie Visual Studio 2013. Po prostu używam:

httpcontext.current.user.identity.name

Jeśli uruchomię to na moim serwerze deweloperskim, działa dobrze, jeśli uruchomię go w trybie debugowania na dowolnej poprzedniej wersji programu Visual Studio, również działa dobrze.

Moje problemy to - jeśli uruchomię to w programie Visual Studio 2013, otrzymuję pusty ciąg.

Moja konfiguracja internetowa jest następująca.

<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>
Neil Watson
źródło

Odpowiedzi:

215

Właśnie przeprowadziłem uaktualnienie do VS 2013 z VS 2012 i bieżąca tożsamość użytkownika (HttpContext.User.Identity) była przekazywana jako anonimowa.

Próbowałem zmienić plik IIS express applicationhost.config, bez różnicy.

Rozwiązaniem było przyjrzenie się właściwościom projektu internetowego, naciśnięcie F4, aby uzyskać właściwości projektu, gdy masz wybrany najwyższy poziom projektu. Nie klikaj projektu prawym przyciskiem myszy i nie wybieraj właściwości, to jest coś zupełnie innego.

Zmień uwierzytelnianie anonimowe na wyłączone i uwierzytelnianie systemu Windows na włączone.

Działa jak sos :)

Toby Simmerling
źródło
10
Dzięki za to. Nie mogę uwierzyć, że dodali to jako „ulepszenie”. Do tego służy web.config. Teraz nie możemy ufać temu, co widzimy w web.config. Znakomity.
trucker_jim
4
Uważam, że jest to lepsze podejście niż zaakceptowana odpowiedź, ponieważ nie wpłynęłoby to na inne aplikacje działające w IIS Express.
niaher
Wielkie dzięki. To też zrobiło to dla mnie! Był to projekt Visual Studio 2008, który zaktualizowałem do Visual Studio 2013.
Rob K.
W VS 2012 użyłem: „Użyj Visual Studio Development Server”. Więc uaktualnienie i to zadziałało. Mimo że teraz działa na nim IIS Express.
Thomas Koelle,
Ta odpowiedź powinna być akceptowana, jeśli właśnie zaktualizowałeś do VS 2013.
Nishant,
130

Kiedy to badałem, znalazłem odpowiedź, ale nie mogę znaleźć odpowiedzi w Internecie, więc pomyślałem, że podzielę się tym:

Rozwiązałem problem, modyfikując plik applicationhost.config. Mój plik został zapisany w folderze „\ My Documents \ IISExpress \ config”.

Wygląda na to, że VS2013 ignorował mój plik web.config i stosował różne metody uwierzytelniania.

Musiałem zmodyfikować tę część pliku, aby wyglądała jak poniżej. Prawdę mówiąc, zmodyfikowałem tylko anonymousAuthentication na false, a tryb windowsAuthentication na 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>
Neil Watson
źródło
2
Musiałem to zrobić, aby debugowanie w VS2013 przy użyciu IIS Express działało niezawodnie. Bez tego wydawało się działać OK raz, a potem 401. (1) Czy istnieje polecenie AppCmd, które zmieniłoby plik applicationhost.config i (2), klawisz F4 w projekcie sieciowym pozwala mi wyłączyć uwierzytelnianie anonimowe i włączyć uwierzytelnianie systemu Windows. Zrobienie tego w VS2012 działało dobrze, w VS2013 nie tworzy darmowego środowiska deweloperskiego 401.
IanT8
4
@Neil, uratowałeś mi dzień. BTW: Nie ma potrzeby wyłączania anonymousAuthentication. Wystarczy włączyć windowsAuthentication. Te ustawienia kontrolują, z jakich mechanizmów uwierzytelniania mogą korzystać witryny internetowe.
chiccodoro,
+1 również ... od jakiegoś czasu próbuję rozwiązać ten dokuczliwy problem z moim lokalnym IISExpress isntance
Jeff Lewis
Ach, tak to się robi. Geniusz. Dzięki za tę wskazówkę, naprawdę przydatna!
Mike Gledhill
1
Musiałem usunąć opcję „Negotiate”, aby móc przetestować wywołanie usługi internetowej (z WSE3) bez uzyskiwania 401.
Wolf5,
41

W Visual Studio 2013 AND VS15 (ale myślę, że jeśli to samo dla wszystkich innych wersji) po prostu naciśnij F4 i zmień te dwie właściwości: - Uwierzytelnianie anonimowe: Wyłącz - Uwierzytelnianie systemu Windows: Włącz

ThaNet
źródło
1
Dzięki za to. Nie mogę uwierzyć, że dodali to jako „ulepszenie”. Do tego służy web.config. Teraz nie możemy ufać temu, co widzimy w web.config. Znakomity.
trucker_jim
1
Właśnie uratowałeś mnie od powrotu do Visual Studio 2010!
Julien P
2
Nie mogę uwierzyć, że to nie było pytanie nr 1 / odpowiedź spośród wszystkich tych postów SO, w których wciąż mówią o ustawieniach IIS
Zagubiony
38

W VS2013 F4 w projekcie, aby wyświetlić okno właściwości i wyłączyć dostęp anonimowy i włączyć „uwierzytelnianie systemu Windows”

Wtedy zadziała. Nie musisz niczego zmieniać

James Pressley
źródło
Frustrujące jest to, że ta opcja istnieje, gdy chcesz debugować projekt sieci Web, ale nie istnieje w przypadku projektów usługi. Grrrr ...
Mike Gledhill
9

VS 2015 to zmienia. Dodał folder .vs do mojego projektu internetowego i znajdował się tam plik applicationhost.config. Wprowadziłem sugerowane zmiany (uwierzytelnianie okna = prawda, anon = fałsz) i zaczęło dostarczać nazwę użytkownika zamiast pustej.

Tom McDonald
źródło
8

Otwórz plik applicationHost.config znajdujący się w folderze C: \ Users [identyfikator użytkownika] \ Documents \ IISExpress \ config. W tym pliku zmień overrideModeDefault anonymousAthentication i windowsAuthentication na „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>

Następnie zmień wartość lockItem na „false” dla modułu AnonymousAuthenticationModule i 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" />

Wprowadzenie tych zmian umożliwi istniejącym ustawieniom konfiguracji sieci Web zastąpienie zawartości pliku applicationHost dla usług IIS Express.

ngiunta
źródło
1
Te zmiany plus wylogowanie zadziałały dla mnie. Coś jest buforowane, ponieważ zatrzymanie usług IIS Express z poziomu ikony powiadomienia i ponowne uruchomienie VS nie działa. Ten błąd jest naprawdę irytujący, pojawia się co kilka miesięcy lub pół roku, gdy budowana jest nowa maszyna wirtualna lub komputer deweloperski. Zawsze powoduje utratę nawet pół dnia, majstrowanie przy ustawieniach. Problem w tym, że te ustawienia powinny to naprawić od razu, ale nie działa i po zabawie nagle działa, bardzo dziwnie i nie podoba mi się to. W takim przypadku zalecane jest wylogowanie. Następnym razem, gdy to się stanie, spróbuję odizolować, ale jest to bardzo irytujące domyślne.
Tony Wall
6

Możesz także zmodyfikować właściwości projektu sieci Web, wybrać „Sieć” z lewej karty, a następnie zmienić listę rozwijaną Serwery na „Lokalne IIS”. Utwórz nowy katalog wirtualny i użyj menedżera IIS, aby skonfigurować pulę witryny / aplikacji zgodnie z potrzebami.

Wolę tę metodę, ponieważ zazwyczaj masz lokalny katalog v (lub witrynę) usług IIS do testowania lokalnie. Nie wpłyniesz w ten sposób na żadne inne witryny.

Właściwości projektu sieci Web

ScottLenart
źródło
1

Wygląda na to, że poprawnej odpowiedzi udzielił powyżej user3149240. Jednak, jak zauważył Neil Watson, plik applicationhost.config jest tutaj odtwarzany.

Zmiany można faktycznie wprowadzić w panelu VS Property lub w pliku, choć w innym miejscu. U dołu pliku applicationhost.config znajduje się zestaw elementów lokalizacji. Wydaje się, że każda aplikacja dla IIS Express ma jeden z nich. Zmiana ustawień w interfejsie użytkownika aktualizuje tę sekcję pliku. Możesz więc zmienić ustawienia za pomocą interfejsu użytkownika lub zmodyfikować ten plik.

Oto przykład z wyłączonym anonimowym uwierzytelnianiem i włączonym uwierzytelnianiem systemu Windows:

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

Jest to odpowiednik w VS UI:

Anonymous Authentication: Disabled
Windows Authentication: Enabled
EricksonG
źródło
W obecnym VS to nie działa, zawsze będzie informować, że jest zablokowane, nawet jeśli moduły applicationhost.config zostały odblokowane zarówno w dokumentach użytkownika, jak i ścieżkach rozwiązania .vs / config. Nie jest też prawdą, że jest to jedyne miejsce, ustawienia z okna właściwości są w rzeczywistości przechowywane w pliku XML projektu VS w sieci Web. Ale to nie ma znaczenia, ponieważ ich zmiana również nie pomaga, host aplikacji zawsze zastępuje. Aby te zmiany zadziałały, konieczne było wylogowanie, to wszystko.
Tony Wall
0

F4 nie zawsze prowadzi mnie do tego panelu. Poza tym często mówi się, że obraz jest wart tysiąca słów.

wprowadź opis obrazu tutaj

Weihui Guo
źródło