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>
Neil Watson
la source

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

Toby Simmerling
la source
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>
Neil Watson
la source
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

ThaNet
la source
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

James Pressley
la source
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.

Tom McDonald
la source
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.

ngiunta
la source
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

ScottLenart
la source
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
EricksonG
la source
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

Weihui Guo
la source