2009-07-31 6 views
3

J'ai une application intranet asp.net utilisant l'authentification Windows. J'ai créé l'application il y a des années avec VS 2005, et le bit d'authentification Windows fonctionnait parfaitement. Mon web.config a le suivant (à l'intérieur de configuration -> élément system.web):HttpContext.Current.User non rempli avec l'authentification Windows activée

<authentication mode="Windows" /> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 

je teste ce dans Firefox pour confirmer que les informations d'identification sont nécessaires, et en fait je suis invité à entrer mes lettres de créance du réseau lors de la première accéder au site, et je suis refusé si elles sont invalides.

Toutefois, lorsque j'essaie d'accéder à HttpContext.Current.User.Identity, l'objet possède des chaînes vides pour Name et AuthenticationType et Authenticated = false. Je pensais que je devrais activer WindowsTokenRoleProvider après avoir regardé les interwebs, et cela n'a rien changé.

<roleManager defaultProvider="WindowsProvider" enabled="true" cacheRolesInCookie="false"> 
     <providers> 
      <clear/> 
      <add name="WindowsProvider" type="System.Web.Security.WindowsTokenRoleProvider"/> 
     </providers> 
    </roleManager> 

Deux choses que j'ai fait depuis la dernière fois que je l'ai vu travailler sont mise à niveau du projet VS 2008 par l'assistant de conversion, et je mets aussi pendant plusieurs mois, alors que mes collègues peuvent J'ai travaillé dessus ici ou là. J'étais assez sûr que la seule chose qui affecte mon User.Identity sont les valeurs dans le web.config mentionné ci-dessus, mais apparemment je fais quelque chose de mal. Quelqu'un d'autre rencontre un problème similaire ou voit quelque chose que je fais mal? Merci.

+0

Avez-vous testé dans IE? –

+0

Oui ... testé aussi dans IE. La seule raison pour laquelle j'ai mentionné Firefox est que IE transmet automatiquement vos informations d'identification alors que FF vous oblige à vous connecter via l'invite. C'est comme ça que je sais que je bloque l'accès anonyme, mais je reçois toujours des informations vides sur User.Identity – Rich

+0

Quand vous dites "quand j'essaie d'accéder à HttpContext.Current.User.Identity", à quel point dans le cycle de vie de la page sont tu fais ça? – Bullines

Répondre

2

Je crois que vous devez vous assurer que l'accès anonyme est désactivé dans IIS pour le site/virtuel.

+0

J'ai l'accès anonyme désactivé (non cochée) et l'authentification intégrée de Windows sélectionnée dans IIS. – Rich

0

Quelques idées:

Sur la configuration du site, tirez la boîte de dialogue 'Paramètres de configuration ASP.NET'. Dans l'onglet "Authentification", le "Mode d'authentification" est-il défini sur "Windows"()? Dans l'onglet 'Application', l''Usurpation d'identité locale' a été définie (je pense qu'elle ne devrait pas être cochée).

Votre serveur a-t-il été déposé du domaine? L'utilisateur exécutant le pool d'applications a-t-il changé? Les stratégies de domaine ont-elles changé, empêchant le serveur d'emprunter l'identité de l'utilisateur à des fins de vérification d'authentification (et non de délégation)?

Avez-vous essayé de réinstaller les extensions asp.net pour votre site? (Ceci est un grand sujet en soi.)

Vous pouvez vérifier l'indicateur HttpContext.SkipAuthorization par programmation.

1

Essayez d'ajouter pour obtenir le comportement que vous voulez? Lorsque l'usurpation d'identité n'est pas activée, beaucoup arrive encore sous le nom de services réseau ou l'utilisateur ASPNET

Et voici Hanselman blog post qui a l'autre idée folle qui est venue à l'esprit:

0

Où vérifiez-vous cet utilisateur? Dans le cycle de demande, certains événements sont déclenchés avant l'autorisation.

Si vous effectuez un test sur Vista, Windows 7 ou Windows Server 2008, il peut y avoir d'autres différences, car le pipeline ASP.Net et IIS est intégré à la configuration par défaut d'IIS 7.

+0

Je dois me connecter avant que le code ne soit exécuté, donc mes informations d'identification sont passées. Mes vérifications pour l'utilisateur ont été dans Page_Load, et rappelez-vous ... cela a bien fonctionné jusqu'à récemment. Ceci est en train d'être testé sur ma machine de développement Vista ainsi que sur deux serveurs différents exécutant le serveur 2003. Merci. – Rich

3

Assurez-vous que votre section <httpModules> n'a pas été effacée. Le fichier web.config de votre machine devrait inclure un extrait comme celui-ci:

<httpModules> 
     <!-- ... --> 
     <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" /> 
     <!-- ... --> 
     <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" /> 
     <!-- ... --> 
    </httpModules> 

L'élément important ici est WindowsAuthentication. Assurez-vous que c'est dans votre fichier %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.config. Assurez-vous également que votre propre site Web et tout fichier web.config figurant dans un site ou dossier de site "parent" ne possèdent pas de balise <clear/> dans la section <httpModules>. Sans le module WindowsAuthentication, peu importe si le navigateur vous oblige à vous connecter ou non ... ASP.NET ne définira jamais la propriété User sans ce module.

Commande de httpModules est également importante, et en particulier, je crois que le module WindowsAuthentication doit apparaître avant le AnonymousIdentification un.

Questions connexes