Problema de autenticación al depurar en VS2013 - iis express

103

Estoy tratando de elegir el nombre de usuario de Windows al depurar en Visual Studio 2013. Simplemente estoy usando:

httpcontext.current.user.identity.name

Si ejecuto esto en mi Dev Server, funciona bien, si lo ejecuto en modo de depuración en cualquier versión anterior de Visual Studio, también funciona bien.

Mi problema es: si ejecuto esto en Visual Studio 2013, obtengo una cadena vacía.

Mi configuración web es la siguiente.

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

Respuestas:

215

Acababa de actualizar a VS 2013 desde VS 2012 y la identidad del usuario actual (HttpContext.User.Identity) aparecía como anónima.

Intenté cambiar el applicationhost.config express de IIS, no hay diferencia.

La solución fue mirar las propiedades del proyecto web, presionar F4 para obtener las propiedades del proyecto cuando haya seleccionado el nivel superior del proyecto. No haga clic derecho en el proyecto y seleccione propiedades, esto es algo completamente diferente.

Cambie la autenticación anónima para que esté deshabilitada y la autenticación de Windows para que esté habilitada.

Funciona como salsa :)

Toby Simmerling
fuente
10
Gracias por eso. No puedo creer que hayan añadido eso como una "mejora". Para eso está web.config. Ahora no podemos confiar en lo que vemos en web.config. Brillante.
trucker_jim
4
Creo que este es un enfoque mejor que la respuesta aceptada, ya que no afectaría a otras aplicaciones que se ejecutan en IIS Express.
niaher
Gracias un montón. ¡Eso también lo hizo por mí! Fue un proyecto de Visual Studio 2008 que actualicé a Visual Studio 2013.
Rob K.
En VS 2012 usé: "Usar Visual Studio Development Server". Así que una actualización y esto funcionó. Aunque ahora ejecuta IIS Express.
Thomas Koelle
Esta debería ser la respuesta aceptada, si acaba de actualizar a VS 2013.
Nishant
130

Mientras investigaba esto, encontré mi respuesta, pero no puedo encontrar la respuesta en Internet, así que pensé en compartir esto:

Solucioné mi problema modificando mi archivo applicationhost.config. Mi archivo se guardó en la carpeta "\ Mis documentos \ IISExpress \ config".

Parece que VS2013 ignoraba mi archivo web.config y aplicaba diferentes métodos de autenticación.

Tuve que modificar esta parte del archivo para que se pareciera a la siguiente. En verdad, solo modifiqué anonymousAuthentication para que fuera falso y el modo de windowsAuthentication para verdadero.

<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
fuente
2
Tuve que hacer esto para que la depuración en VS2013 usando IIS Express funcionara de manera confiable. Sin esto, pareció funcionar bien una vez, luego 401 a partir de entonces. (1) ¿Existe un comando AppCmd ​​que cambiaría el archivo applicationhost.config y (2), F4 en el proyecto web me permite desactivar la autenticación anónima y activar la autenticación de Windows? Hacer eso en VS2012 funcionó bien, en VS2013 no produce un entorno de desarrollo gratuito 401.
IanT8
4
@Neil, me salvaste el día. Por cierto: no es necesario apagarlo anonymousAuthentication. Es suficiente encender windowsAuthentication. Esta configuración controla qué mecanismos de autenticación pueden utilizar los sitios web.
chiccodoro
+1 también ... he intentado resolver este problema persistente durante un tiempo con mi isntance local de IISExpress
Jeff Lewis
Ah, así es como se hace. Genio. Gracias por este consejo, ¡realmente útil!
Mike Gledhill
1
Tuve que eliminar "Negotiate" para poder probar una llamada de servicio web (con WSE3) sin obtener un 401.
Wolf5
41

En Visual Studio 2013 Y VS15 (pero supongo que si es lo mismo para todas las demás versiones) simplemente presione F4 y cambie estas dos propiedades: - Autenticación anónima: Desactivar - Autenticación de Windows: Activar

ThaNet
fuente
1
Gracias por eso. No puedo creer que hayan añadido eso como una "mejora". Para eso está web.config. Ahora no podemos confiar en lo que vemos en web.config. Brillante.
trucker_jim
1
¡Me acaba de salvar de una reversión a Visual Studio 2010!
Julien P
2
No puedo creer que esta no sea la pregunta / respuesta n. ° 1 de todas estas publicaciones SO que siguen hablando sobre la configuración de IIS
Perdido el
38

En VS2013 F4 en su proyecto para ver la ventana de propiedades y deshabilitar el acceso anónimo y habilitar la "autenticación de Windows"

Entonces funcionará. No es necesario cambiar nada más

James Pressley
fuente
De manera frustrante, esta opción existe cuando desea depurar un proyecto web, pero no existe para los proyectos de servicio. Grrrr ...
Mike Gledhill
9

VS 2015 cambia esto. Agregó una carpeta .vs a mi proyecto web y el applicationhost.config estaba allí. Hice los cambios sugeridos (autenticación de ventana = verdadero, anon = falso) y comenzó a entregar un nombre de usuario en lugar de un espacio en blanco.

Tom McDonald
fuente
8

Abra el archivo applicationHost.config ubicado en la carpeta C: \ Users [userid] \ Documents \ IISExpress \ config. Dentro de este archivo, cambie el overrideModeDefault de anonymousAthentication y windowsAuthentication a "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>

A continuación, cambie lockItem a "false" para AnonymousAuthenticationModule y 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" />

Hacer estos cambios permitirá que la configuración de configuración web existente anule lo que está en el archivo applicationHost para IIS Express.

ngiunta
fuente
1
Estos cambios más un cierre de sesión funcionaron para mí. Algo se almacena en caché, porque detener IIS Express desde el icono de notificación y reiniciar VS no funciona. Este error es realmente molesto, ocurre cada pocos meses o medio año cuando se construye una nueva VM o PC de desarrollador. Siempre causa hasta medio día perdido, alterando la configuración. El problema es que, aunque estas configuraciones deberían solucionarlo de inmediato, no es así y después de jugar de repente funciona, muy extraño y eso no me gusta. Entonces se recomienda cerrar la sesión. La próxima vez que suceda intentaré aislar, pero este es un valor predeterminado muy molesto.
Tony Wall
6

También puede modificar las propiedades del proyecto para su proyecto web, elegir "Web" en las pestañas de la izquierda y luego cambiar el menú desplegable Servidores a "IIS local". Cree un nuevo directorio virtual y use el administrador de IIS para configurar su sitio / grupo de aplicaciones como desee.

Prefiero este método, ya que normalmente tendría un directorio v (o sitio) de IIS local para probarlo localmente. Tampoco afectará a ningún otro sitio de esta manera.

Propiedades del proyecto web

ScottLenart
fuente
1

Parece que la respuesta correcta la proporciona el usuario3149240 anterior. Sin embargo, como señaló Neil Watson, el archivo applicationhost.config está en juego aquí.

Los cambios se pueden realizar en el panel de propiedades de VS o en el archivo, aunque en un lugar diferente. Cerca de la parte inferior del archivo applicationhost.config hay un conjunto de elementos de ubicación. Cada aplicación para IIS Express parece tener uno de estos. Cambiar la configuración en la interfaz de usuario actualiza esta sección del archivo. Por lo tanto, puede cambiar la configuración a través de la interfaz de usuario o modificar este archivo.

Aquí hay un ejemplo con la autenticación anónima desactivada y la autenticación de Windows activada:

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

Esto es equivalente en la interfaz de usuario de VS a:

Anonymous Authentication: Disabled
Windows Authentication: Enabled
EricksonG
fuente
En el VS actual, esto no funciona, siempre dirá que está bloqueado incluso cuando los módulos applicationhost.config se hayan desbloqueado tanto en los documentos de usuario como en las rutas .vs / config de la solución. Además, no es cierto que este sea el único lugar, la configuración de la ventana de propiedades se almacena en el XML del proyecto web VS. Pero no importa porque cambiarlos tampoco ayuda, el host de la aplicación siempre anula. Era necesario cerrar la sesión para que esos cambios funcionen, eso es todo.
Tony Wall
0

F4 no siempre me lleva a este panel. Además, a menudo se dice que una imagen vale más que mil palabras.

ingrese la descripción de la imagen aquí

Weihui Guo
fuente