Problema di autenticazione durante il debug in VS2013 - iis express


103

Sto cercando di raccogliere il nome utente di Windows durante il debug in Visual Studio 2013. Sto semplicemente usando:

httpcontext.current.user.identity.name

Se lo eseguo sul mio Dev Server funziona bene, se lo eseguo in modalità debug su qualsiasi versione precedente di Visual Studio funziona anche bene.

Il mio problema è: se lo eseguo su Visual Studio 2013 ottengo una stringa vuota.

La mia configurazione web è la seguente.

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

Risposte:


215

Ho appena eseguito l'aggiornamento a VS 2013 da VS 2012 e l'identità dell'utente corrente (HttpContext.User.Identity) risultava anonima.

Ho provato a cambiare IIS express applicationhost.config, nessuna differenza.

La soluzione era guardare le proprietà del progetto web, premere F4 per ottenere le proprietà del progetto quando hai selezionato il livello più alto del progetto. Non fare clic con il pulsante destro del mouse sul progetto e selezionare le proprietà, questo è qualcosa di completamente diverso.

Modificare l'Autenticazione anonima su Disabilitato e l'Autenticazione di Windows su Abilitato.

Funziona come il sugo :)


10
Grazie per quello. Non posso credere che l'abbiano aggiunto come "miglioramento". Questo è lo scopo di web.config. Ora non possiamo fidarci di ciò che vediamo in web.config. Brillante.
trucker_jim

4
Credo che questo sia un approccio migliore rispetto alla risposta accettata, poiché non influirebbe su altre applicazioni in esecuzione su IIS Express.
niaher

Grazie mille. Lo ha fatto anche per me! Era un progetto Visual Studio 2008 che ho aggiornato a Visual Studio 2013.
Rob K.

In VS 2012 ho usato: "Usa Visual Studio Development Server". Quindi un aggiornamento e questo ha funzionato. Anche se ora esegue IIS Express.
Thomas Koelle,

Questa dovrebbe essere la risposta accettata, se hai appena
eseguito l'

130

Mentre stavo ricercando questo ho trovato la mia risposta, ma non riesco a trovare la risposta su Internet, quindi ho pensato di condividere questo:

Ho risolto il problema modificando il mio file applicationhost.config. Il mio file è stato salvato nella cartella "\ My Documents \ IISExpress \ config".

Sembra che VS2013 ignorasse il mio file web.config e applicasse diversi metodi di autenticazione.

Ho dovuto modificare questa parte del file in modo che fosse simile al seguente. In verità, ho modificato solo anonymousAuthentication in false e la modalità WindowsAuthentication in 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
Ho dovuto farlo per ottenere il debug in VS2013 utilizzando IIS Express per funzionare in modo affidabile. Senza questo, sembrava funzionare bene una volta, poi 401 da allora in poi. (1) Esiste un comando AppCmd ​​che cambierebbe il file applicationhost.config e (2), F4 sul progetto Web mi consente di disattivare l'autenticazione anonima e attivare l'autenticazione di Windows. Farlo in VS2012 ha funzionato bene, in VS2013 non si produce un ambiente di sviluppo 401 gratuito.
IanT8

4
@ Neil, mi hai salvato la giornata. BTW: non è necessario spegnerlo anonymousAuthentication. È sufficiente accendere windowsAuthentication. Queste impostazioni controllano i meccanismi di autenticazione che i siti Web possono utilizzare.
chiccodoro

+1 pure ... ho cercato di risolvere questo fastidioso problema per un po 'con il mio IISExpress locale isntance
Jeff Lewis

Ah, ecco come farlo. Genio. Grazie per questo suggerimento, davvero utile!
Mike Gledhill

1
Ho dovuto rimuovere la "Negoziazione" per poter testare una chiamata al servizio web (con WSE3) senza ottenere un 401.
Wolf5

41

In Visual Studio 2013 E VS15 (ma immagino che sia lo stesso per tutte le altre versioni) basta premere F4 e modificare queste due proprietà: - Autenticazione anonima: disabilita - Autenticazione di Windows: abilita


1
Grazie per quello. Non posso credere che l'abbiano aggiunto come "miglioramento". Questo è lo scopo di web.config. Ora non possiamo fidarci di ciò che vediamo in web.config. Brillante.
trucker_jim

1
Mi hai appena salvato da un rollback a Visual Studio 2010!
Julien P

2
Non posso credere che questa non fosse la ricerca / risposta numero 1 tra tutti questi post SO quelli continuano a parlare delle impostazioni di IIS
Lost

38

In VS2013 F4 sul tuo progetto per visualizzare la finestra delle proprietà e disabilitare l'accesso anonimo e abilitare "l'autenticazione di Windows"

Allora funzionerà. Non c'è bisogno di cambiare nient'altro


In modo frustrante, questa opzione esiste quando si desidera eseguire il debug di un progetto Web, ma non esiste per i progetti di servizio. Grrrr ...
Mike Gledhill

9

VS 2015 cambia questo. Ha aggiunto una cartella .vs al mio progetto web e applicationhost.config era lì. Ho apportato le modifiche suggerite (autenticazione della finestra = true, anon = false) e ha iniziato a fornire un nome utente invece di uno spazio vuoto.


8

Apri il file applicationHost.config che si trova nella cartella C: \ Users [userid] \ Documents \ IISExpress \ config. All'interno di questo file cambia l'overrideModeDefault di anonymousAthentication e windowsAuthentication su "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>

La prossima modifica lockItem deve essere "false" per AnonymousAuthenticationModule e 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" />

Apportare queste modifiche consentirà alle impostazioni di configurazione Web esistenti di sovrascrivere ciò che è nel file applicationHost per IIS Express.


1
Queste modifiche più una disconnessione hanno funzionato per me. Qualcosa è stato memorizzato nella cache, perché l'arresto di IIS Express dall'icona di notifica e il riavvio di VS non funziona. Questo errore è davvero fastidioso, si verifica ogni pochi mesi o sei mesi quando viene creata una nuova VM o un PC sviluppatore. Causa sempre fino a mezza giornata persa, scherzando con le impostazioni. Il problema è che anche se queste impostazioni dovrebbero risolverlo immediatamente, non lo fa e dopo aver giocato improvvisamente funziona, molto strano e non mi piace. Si consiglia quindi una disconnessione. La prossima volta che accadrà cercherò di isolare, ma questo è un valore predefinito molto fastidioso.
Tony Wall

6

Puoi anche modificare le proprietà del progetto per il tuo progetto web, scegliere "Web" dalle schede a sinistra, quindi modificare il menu a discesa Server in "IIS locale". Crea una nuova directory virtuale e utilizza il gestore IIS per configurare il tuo sito / pool di app come desideri.

Preferisco questo metodo, poiché in genere si dispone di una directory v (o sito) IIS locale da testare localmente. In questo modo non influenzerai nemmeno altri siti.

Proprietà del progetto Web


1

Sembra che la risposta giusta sia fornita da user3149240 sopra. Tuttavia, come ha sottolineato Neil Watson, il file applicationhost.config è in gioco qui.

Le modifiche possono essere effettivamente apportate nel riquadro Proprietà VS o nel file anche se in un punto diverso. Nella parte inferiore del file applicationhost.config c'è un insieme di elementi di posizione. Ogni app per IIS Express sembra avere uno di questi. La modifica delle impostazioni nell'interfaccia utente aggiorna questa sezione del file. Quindi, puoi modificare le impostazioni tramite l'interfaccia utente o modificare questo file.

Ecco un esempio con l'autenticazione anonima disattivata e l'autenticazione di Windows attivata:

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

Questo è equivalente nell'interfaccia utente di VS a:

Anonymous Authentication: Disabled
Windows Authentication: Enabled

Nell'attuale VS questo non funziona, dirà sempre che è bloccato anche quando i moduli applicationhost.config sono stati sbloccati sia nei documenti utente che nei percorsi della soluzione .vs / config. Inoltre non è vero questo è l'unico posto, le impostazioni dalla finestra delle proprietà sono effettivamente memorizzate nell'XML del progetto web VS. Ma non importa perché anche cambiarli non aiuta, l'host dell'applicazione ha sempre la precedenza. Era necessaria una disconnessione per far funzionare le modifiche, tutto qui.
Tony Wall

0

F4 non sempre mi porta a questo pannello. Inoltre, si dice spesso che un'immagine vale più di mille parole.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.