Authentifizierungsproblem beim Debuggen in VS2013 - iis express

103

Ich versuche, den Windows-Benutzernamen beim Debuggen in Visual Studio 2013 abzurufen. Ich verwende einfach:

httpcontext.current.user.identity.name

Wenn ich dies auf meinem Dev Server ausführe, funktioniert es einwandfrei. Wenn ich es in einer früheren Version von Visual Studio im Debug-Modus ausführe, funktioniert es auch einwandfrei.

Meine Probleme sind: Wenn ich dies in Visual Studio 2013 ausführe, erhalte ich eine leere Zeichenfolge.

Meine Webkonfiguration ist wie folgt.

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

Antworten:

215

Ich hatte gerade ein Upgrade von VS 2012 auf VS 2013 durchgeführt und die aktuelle Benutzeridentität (HttpContext.User.Identity) wurde anonym angezeigt.

Ich habe versucht, die IIS-Express-Anwendunghost.config zu ändern, kein Unterschied.

Die Lösung bestand darin, die Eigenschaften des Webprojekts zu überprüfen und F4 zu drücken, um die Projekteigenschaften abzurufen, wenn Sie die oberste Ebene des Projekts ausgewählt haben. Klicken Sie nicht mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften aus. Dies ist etwas ganz anderes.

Ändern Sie die Option Anonyme Authentifizierung deaktiviert und Windows-Authentifizierung aktiviert.

Funktioniert wie Soße :)

Toby Simmerling
quelle
10
Danke dafür. Ich kann nicht glauben, dass sie das als "Verbesserung" hinzugefügt haben. Dafür ist web.config da. Jetzt können wir dem, was wir in web.config sehen, nicht vertrauen. Brillant.
trucker_jim
4
Ich glaube, dies ist ein besserer Ansatz als die akzeptierte Antwort, da dies keine Auswirkungen auf andere Anwendungen hat, die auf dem IIS Express ausgeführt werden.
Niaher
Vielen Dank. Das hat es auch für mich getan! War ein Visual Studio 2008-Projekt, das ich auf Visual Studio 2013 aktualisiert habe.
Rob K.
In VS 2012 habe ich Folgendes verwendet: "Visual Studio Development Server verwenden". Also ein Upgrade und das hat funktioniert. Obwohl jetzt IIS Express ausgeführt wird.
Thomas Koelle
Dies sollte die akzeptierte Antwort sein, wenn Sie gerade auf VS 2013 aktualisiert haben.
Nishant
130

Als ich dies recherchierte, fand ich meine Antwort, kann sie aber nicht im Internet finden. Deshalb dachte ich, ich würde dies teilen:

Ich habe mein Problem behoben, indem ich meine Datei applicationhost.config geändert habe. Meine Datei wurde im Ordner "\ Eigene Dateien \ IISExpress \ config" gespeichert.

Es scheint, dass VS2013 meine Datei web.config ignoriert und verschiedene Authentifizierungsmethoden angewendet hat.

Ich musste diesen Teil der Datei so ändern, dass er wie folgt aussieht. In Wahrheit habe ich nur die anonyme Authentifizierung auf false und den windowsAuthentication-Modus auf true geändert.

<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
quelle
2
Ich musste dies tun, um das Debuggen in VS2013 mit IIS Express zu ermöglichen und zuverlässig zu arbeiten. Ohne dies schien einmal OK zu funktionieren, danach 401. (1) Gibt es einen AppCmd-Befehl, der die Datei applicationhost.config ändern würde, und (2) mit F4 im Webprojekt kann ich die anonyme Authentifizierung ausschalten und die Windows-Authentifizierung aktivieren. Dies in VS2012 zu tun hat gut funktioniert, in VS2013 wird keine 401-freie Entwicklungsumgebung erzeugt.
IanT8
4
@Neil, du hast meinen Tag gerettet. Übrigens: Das Ausschalten ist nicht erforderlich anonymousAuthentication. Es reicht aus, sich einzuschalten windowsAuthentication. Diese Einstellungen steuern, welche Authentifizierungsmechanismen die Websites verwenden dürfen.
Chiccodoro
+1 auch ... habe versucht, dieses quälende Problem für eine Weile mit meiner lokalen IISExpress isntance zu lösen
Jeff Lewis
Ah, so geht das. Genius. Danke für diesen Tipp, wirklich nützlich!
Mike Gledhill
1
Ich musste das "Negotiate" entfernen, um einen Webservice-Aufruf (mit WSE3) testen zu können, ohne einen 401 zu erhalten.
Wolf5
41

Drücken Sie in Visual Studio 2013 UND VS15 (aber ich denke, wenn dies für alle anderen Versionen gleich ist) einfach F4 und ändern Sie diese beiden Eigenschaften: - Anonyme Authentifizierung: Deaktivieren - Windows-Authentifizierung: Aktivieren

ThaNet
quelle
1
Danke dafür. Ich kann nicht glauben, dass sie das als "Verbesserung" hinzugefügt haben. Dafür ist web.config da. Jetzt können wir dem, was wir in web.config sehen, nicht vertrauen. Brillant.
trucker_jim
1
Sie haben mich gerade vor einem Rollback auf Visual Studio 2010 gerettet!
Julien P
2
Ich kann nicht glauben, dass dies nicht die Nummer 1 unter all diesen SO-Posts war, die immer wieder über IIS-Einstellungen sprechen
verloren
38

In VS2013 F4 in Ihrem Projekt können Sie das Eigenschaftenfenster anzeigen, den anonymen Zugriff deaktivieren und die "Windows-Authentifizierung" aktivieren.

Dann wird es funktionieren. Sie müssen nichts anderes ändern

James Pressley
quelle
Frustrierenderweise ist diese Option vorhanden, wenn Sie ein Webprojekt debuggen möchten, für Serviceprojekte jedoch nicht. Grrrr ...
Mike Gledhill
9

VS 2015 ändert dies. Es fügte meinem Webprojekt einen .vs-Ordner hinzu und die applicationhost.config befand sich dort. Ich habe die vorgeschlagenen Änderungen vorgenommen (Fensterauthentifizierung = true, anon = false) und es wurde ein Benutzername anstelle eines Leerzeichens bereitgestellt.

Tom McDonald
quelle
8

Öffnen Sie die Datei applicationHost.config im Ordner C: \ Users [Benutzer-ID] \ Documents \ IISExpress \ config. Ändern Sie in dieser Datei den overrideModeDefault von anonymAthentication und windowsAuthentication in "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>

Ändern Sie als Nächstes lockItem für AnonymousAuthenticationModule und WindowsAuthenticationModule in "false"

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

Durch diese Änderungen können die vorhandenen Webkonfigurationseinstellungen überschreiben, was in der applicationHost-Datei für IIS Express enthalten ist.

Ngiunta
quelle
1
Diese Änderungen und eine Abmeldung haben bei mir funktioniert. Es wird etwas zwischengespeichert, da das Stoppen von IIS Express über das Benachrichtigungssymbol und das Neustarten von VS nicht funktioniert. Dieser Fehler ist wirklich ärgerlich. Er tritt alle paar Monate oder ein halbes Jahr auf, wenn eine neue VM oder ein neuer Entwickler-PC erstellt wird. Es geht immer bis zu einem halben Tag verloren und es wird an den Einstellungen herumgespielt. Das Problem ist, obwohl diese Einstellungen es sofort beheben sollten, funktioniert es nicht und nach dem Herumspielen funktioniert es plötzlich, sehr seltsam und das gefällt mir nicht. Eine Abmeldung wird dann empfohlen. Das nächste Mal werde ich versuchen zu isolieren, aber dies ist eine sehr ärgerliche Standardeinstellung.
Tony Wall
6

Sie können auch die Projekteigenschaften für Ihr Webprojekt ändern, auf den linken Registerkarten "Web" auswählen und dann die Dropdown-Liste "Server" in "Lokaler IIS" ändern. Erstellen Sie ein neues virtuelles Verzeichnis und verwenden Sie den IIS-Manager, um Ihren Site- / App-Pool wie gewünscht einzurichten.

Ich bevorzuge diese Methode, da Sie normalerweise ein lokales IIS-V-Verzeichnis (oder eine Site) zum lokalen Testen haben. Sie werden auch keine anderen Websites auf diese Weise beeinflussen.

Webprojekteigenschaften

ScottLenart
quelle
1

Es scheint, dass die richtige Antwort von user3149240 oben bereitgestellt wird. Wie Neil Watson jedoch betonte, spielt hier die Datei applicationhost.config eine Rolle.

Die Änderungen können tatsächlich im VS-Eigenschaftenbereich oder in der Datei vorgenommen werden, wenn auch an einer anderen Stelle. Am unteren Rand der Datei applicationhost.config befindet sich eine Reihe von Speicherortelementen. Jede App für IIS Express scheint eine davon zu haben. Durch Ändern der Einstellungen in der Benutzeroberfläche wird dieser Abschnitt der Datei aktualisiert. Sie können die Einstellungen entweder über die Benutzeroberfläche ändern oder diese Datei ändern.

Hier ist ein Beispiel mit anonymer Authentifizierung aus und Windows-Authentifizierung ein:

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

Dies entspricht in der VS-Benutzeroberfläche:

Anonymous Authentication: Disabled
Windows Authentication: Enabled
EricksonG
quelle
Im aktuellen VS funktioniert dies nicht. Es wird immer angezeigt, dass es gesperrt ist, auch wenn die applicationhost.config-Module sowohl in Benutzerdokumenten als auch in den Lösungspfaden .vs / config entsperrt wurden. Es ist auch nicht wahr, dass dies der einzige Ort ist. Die Einstellungen aus dem Eigenschaftenfenster werden tatsächlich im XML des VS-Webprojekts gespeichert. Aber es spielt keine Rolle, da das Ändern auch nicht hilft, der Anwendungshost überschreibt immer. Eine Abmeldung war notwendig, damit diese Änderungen funktionieren, das ist alles.
Tony Wall
0

F4 bringt mich nicht immer zu diesem Panel. Außerdem wird oft gesagt, dass ein Bild mehr sagt als tausend Worte.

Geben Sie hier die Bildbeschreibung ein

Weihui Guo
quelle