Problème d'authentification lors du débogage dans VS2013 - iis express


103

J'essaie de récupérer le nom d'utilisateur Windows lors du débogage dans Visual Studio 2013. J'utilise simplement:

httpcontext.current.user.identity.name

Si je l'exécute sur mon serveur de développement, cela fonctionne bien, si je l'exécute en mode débogage sur une version précédente de Visual Studio, cela fonctionne également très bien.

Mon problème est - Si j'exécute ceci sur Visual Studio 2013, j'obtiens une chaîne vide.

Ma configuration Web est la suivante.

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

Réponses:


215

Je venais de passer à VS 2013 à partir de VS 2012 et l'identité de l'utilisateur actuel (HttpContext.User.Identity) était apparue comme anonyme.

J'ai essayé de changer IIS express applicationhost.config, aucune différence.

La solution était de regarder les propriétés du projet Web, appuyez sur F4 pour obtenir les propriétés du projet lorsque vous avez sélectionné le niveau supérieur du projet. Ne faites pas un clic droit sur le projet et sélectionnez les propriétés, c'est quelque chose de complètement différent.

Modifiez l'authentification anonyme pour qu'elle soit désactivée et que l'authentification Windows soit activée.

Fonctionne comme une sauce :)


10
Merci pour celui-là. Je ne peux pas croire qu'ils aient ajouté cela comme une «amélioration». C'est à cela que sert web.config. Maintenant, nous ne pouvons pas faire confiance à ce que nous voyons dans web.config. Brillant.
trucker_jim

4
Je pense que c'est une meilleure approche que la réponse acceptée, car elle n'affecterait pas les autres applications exécutées sur IIS Express.
niaher

Merci beaucoup. Ça l'a fait pour moi aussi! Était un projet Visual Studio 2008 que j'ai mis à niveau vers Visual Studio 2013.
Rob K.

Dans VS 2012, j'ai utilisé: "Utiliser Visual Studio Development Server". Donc, une mise à niveau et cela a fonctionné. Même s'il exécute maintenant IIS Express.
Thomas Koelle

Celui-ci devrait être la réponse acceptée, si vous venez de passer à VS 2013.
Nishant

130

En recherchant ceci, j'ai trouvé ma réponse, mais je ne trouve pas la réponse sur Internet, alors j'ai pensé partager ceci:

J'ai résolu mon problème en modifiant mon fichier applicationhost.config. Mon fichier a été enregistré dans le dossier "\ Mes documents \ IISExpress \ config".

Il semble que VS2013 ignorait mon fichier web.config et appliquait différentes méthodes d'authentification.

J'ai dû modifier cette partie du fichier pour qu'elle ressemble à celle ci-dessous. En vérité, je n'ai modifié que l'anonymousAuthentication pour être false et le mode windowsAuthentication sur 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
J'ai dû faire cela pour que le débogage dans VS2013 à l'aide d'IIS Express fonctionne de manière fiable. Sans cela, semblait fonctionner correctement une fois, puis 401 par la suite. (1) Existe-t-il une commande AppCmd ​​qui modifierait le fichier applicationhost.config, et (2), F4 sur le projet Web me permet de désactiver l'authentification anonyme et l'authentification Windows. Faire cela dans VS2012 a bien fonctionné, dans VS2013 ne produit pas un environnement de développement gratuit 401.
IanT8

4
@Neil, tu as sauvé ma journée. BTW: Il n'est pas nécessaire de s'éteindre anonymousAuthentication. Il suffit de s'allumer windowsAuthentication. Ces paramètres contrôlent les mécanismes d'authentification que les sites Web sont autorisés à utiliser.
chiccodoro

+1 aussi ... j'ai essayé de résoudre ce problème lancinant pendant un certain temps avec mon isntance IISExpress local
Jeff Lewis

Ah, c'est comment faire. Génie. Merci pour cette astuce, vraiment utile!
Mike Gledhill

1
J'ai dû supprimer le "Negotiate" pour pouvoir tester un appel de service Web (avec WSE3) sans obtenir un 401.
Wolf5

41

Dans Visual Studio 2013 ET VS15 (mais je suppose que c'est la même chose pour toutes les autres versions), appuyez simplement sur F4 et modifiez ces deux propriétés: - Authentification anonyme: Désactiver - Authentification Windows: Activer


1
Merci pour celui-là. Je ne peux pas croire qu'ils aient ajouté cela comme une «amélioration». C'est à cela que sert web.config. Maintenant, nous ne pouvons pas faire confiance à ce que nous voyons dans web.config. Brillant.
trucker_jim

1
Vous venez de me sauver d'une restauration vers Visual Studio 2010!
Julien P

2
Je ne peux pas croire que ce n'était pas la première question / réponse parmi tous ces messages SO, ceux-ci continuent de parler des paramètres IIS
Perdu

38

Dans VS2013 F4 sur votre projet pour afficher la fenêtre des propriétés et désactiver l'accès anonyme et activer «l'authentification Windows»

Ensuite, cela fonctionnera. Pas besoin de changer quoi que ce soit d'autre


Frustrant, cette option existe lorsque vous souhaitez déboguer un projet Web, mais n'existe pas pour les projets de service. Grrrr ...
Mike Gledhill

9

VS 2015 change cela. Il a ajouté un dossier .vs à mon projet Web et l'applicationhost.config s'y trouvait. J'ai apporté les modifications suggérées (authentification de fenêtre = true, anon = false) et il a commencé à fournir un nom d'utilisateur au lieu d'un blanc.


8

Ouvrez le fichier applicationHost.config situé dans le dossier C: \ Users [ID utilisateur] \ Documents \ IISExpress \ config. Dans ce fichier, changez le overrideModeDefault de anonymousAthentication et windowsAuthentication en "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>

Changez ensuite lockItem sur "false" pour AnonymousAuthenticationModule et 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" />

Ces modifications permettront aux paramètres de configuration Web existants de remplacer ce qui se trouve dans le fichier applicationHost pour IIS Express.


1
Ces changements et une déconnexion ont fonctionné pour moi. Quelque chose est mis en cache, car l'arrêt d'IIS Express à partir de l'icône de notification et le redémarrage de VS ne fonctionnent pas. Cette erreur est vraiment ennuyeuse, elle se produit tous les quelques mois ou tous les six mois lorsqu'une nouvelle VM ou un PC développeur est construit. Cela entraîne toujours jusqu'à une demi-journée perdue, dérangeant les paramètres. Le problème est que bien que ces paramètres doivent le résoudre immédiatement, ce n'est pas le cas et après avoir joué, cela fonctionne soudainement, très étrange et je n'aime pas ça. Une déconnexion est alors recommandée. La prochaine fois que cela arrivera, j'essaierai d'isoler, mais c'est un défaut très ennuyeux.
Tony Wall

6

Vous pouvez également modifier les propriétés du projet pour votre projet Web, choisir "Web" dans les onglets de gauche, puis changer le menu déroulant Serveurs en "IIS local". Créez un nouveau répertoire virtuel et utilisez le gestionnaire IIS pour configurer votre site / pool d'applications comme vous le souhaitez.

Je préfère cette méthode, car vous auriez généralement un v-directory (ou site) IIS local à tester localement. Vous n'affecterez pas non plus les autres sites de cette façon.

Propriétés du projet Web


1

Il semble que la bonne réponse soit fournie par user3149240 ci-dessus. Cependant, comme l'a souligné Neil Watson, le fichier applicationhost.config est en jeu ici.

Les modifications peuvent en fait être apportées dans le volet Propriétés VS ou dans le fichier, bien qu'à un endroit différent. Au bas du fichier applicationhost.config se trouve un ensemble d'éléments d'emplacement. Chaque application pour IIS Express semble en avoir un. La modification des paramètres dans l'interface utilisateur met à jour cette section du fichier. Ainsi, vous pouvez modifier les paramètres via l'interface utilisateur ou modifier ce fichier.

Voici un exemple avec l'authentification anonyme désactivée et l'authentification Windows activée:

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

Ceci est équivalent dans VS UI à:

Anonymous Authentication: Disabled
Windows Authentication: Enabled

Dans le VS actuel, cela ne fonctionne pas, il indiquera toujours qu'il est verrouillé même lorsque les modules applicationhost.config ont été déverrouillés à la fois dans les documents utilisateur et dans les chemins .vs / config de la solution. Ce n'est pas non plus le seul endroit, les paramètres de la fenêtre des propriétés sont en fait stockés dans le XML du projet Web VS. Mais cela n'a pas d'importance car les changer n'aide pas non plus, l'hôte d'application remplace toujours. Une déconnexion était nécessaire pour que ces changements fonctionnent, c'est tout.
Tony Wall

0

F4 ne m'amène pas toujours à ce panel. D'ailleurs, on dit souvent qu'une image vaut mille mots.

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.