2017-07-04 5 views
0

J'essaie de créer un filtre d'action simple pour mon site MVC qui vérifie l'utilisateur Windows actuel par rapport à l'accès autorisé au site. Pour une raison quelconque, l'objet filterContext.HttpContext.User.Identity est toujours défini sur anonyme sans nom d'utilisateur. J'ai essayé de l'attraper à différentes étapes (OnAuthenticate et OnAuthorize), mais c'est toujours anonyme.Windows Identité toujours anonyme dans le pipeline de demandes ASP.NET

J'ai actuellement anonyme authentification Windows et activé dans IIS (en fait suivi this example pour configurer la fonctionnalité Windows Auth), et je le bloc suivant dans le nœud system.web de mon web.config:

<authentication mode="Windows" /> 
<authorization> 
    <allow users="*" /> 
    <deny users="?" /> 
</authorization> 
Cependant, pour quelque raison que ce soit, l'identité est toujours anonyme sans nom d'utilisateur.

Je dois manquer quelque chose ici. Avec Windows Auth défini dans IIS, je suis toujours invité pour le nom d'utilisateur/mot de passe combo (qui échoue réellement avec l'erreur HTTP401.1 0xc000006d, mais je pense que cela est dû au fait que j'ai une configuration d'en-tête d'hôte personnalisée pour le développement). J'ai aussi lu quelques articles qui suggèrent que c'est parce que mon site est déterminé à être dans la zone internet et les réponses indiquent toujours d'ajouter le site à la zone intranet dans Internet Explorer. Cela semble être une solution de fortune, et non la solution réelle.

Idéalement, je voudrais avoir les éléments suivants:

  1. utilisateur accède à mon site
  2. Dans les coulisses, leur nom d'utilisateur Windows est repris, et authentifiées contre les utilisateurs autorisés gérés par l'application
  3. utilisateur authentifié, chargement de la page, l'utilisateur est pas plus sage qu'ils authentifiées

Que dois-je faire pour y parvenir?

Merci d'avance pour toute aide. S'il vous plaît laissez-moi savoir si je peux fournir plus de contexte.

Edit: avez oublié d'ajouter que je suis en cela sur Windows 7 SP1, IIS 7.5

+0

Vous devez remplir la connexion sans un 401 avant qu'une identité Windows ne soit définie. Sinon, votre identité sera anonyme. En ce qui concerne la zone intranet, je n'ai jamais eu le problème. Il peut y avoir des problèmes lors de l'authentification en utilisant localhost. –

Répondre

0

Ces deux règles sont en mauvais ordre dans votre code

<allow users="*" /> 
<deny users="?" /> 

Puisque vous permettent d'abord tout le monde, la deuxième règle est même pas évalué.

inversez

<deny users="?" /> 
<allow users="*" /> 

De cette façon, vous devez d'abord refuser les demandes anonymes, de sorte que le pipeline d'authentification peut même revenir 401 au client. Lorsque l'authentification NTLM/Kerberos sélectionne le nom d'utilisateur, la deuxième règle autorise tout le monde (authentifié cette fois).

Pour que cela fonctionne, vous devez également désactiver l'authentification anonyme.

+0

Cela semble avoir été le problème! L'ordre de refuser/autoriser a du sens en rétrospective. Merci! –

0

Essayez

<system.web> 
    <identity impersonate="true" /> 
</system.web> 

OU

Cliquez sur le projet Non la solution => Ouvrir Propriétés Explorateur pas cliquez avec le bouton droit de la souris sur Propriétés => vous trouverez l'authentification anonyme sur désactivé

0

Vous devez désactiver l'authentification anonyme de iis et activer uniquement l'authentification Windows.

0

Dans l'explorateur de solution, appuyez sur F4 sur le projet, et changer l'authentification Windows pour activer si vous exécutez votre projet à partir de Visual Studio;

Dans IIS sélectionnez votre WebSite ->authentification et Désactiverauthentification anonyme et assurez-vous que "l'authentification Windows" si Activer