J'essaie de créer un filtre d'action simple pour mon site MVC qui vérifie l'utilisateur Windows actuel par rapport à ceux autorisés à accéder 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.

L'authentification Windows anonyme et est actuellement activée dans IIS (en fait, j'ai suivi cet exemple pour configurer Windows Auth feature), et j'ai le bloc suivant dans le nœud system.web de mon web.config:

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

Cependant, pour une raison quelconque, 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é à saisir le combo nom d'utilisateur / mot de passe (qui échoue en fait avec l'erreur HTTP401.1 0xc000006d, même si je pense que cela peut être dû au fait que j'ai une configuration d'en-tête d'hôte personnalisée pour le développement) . J'ai également lu quelques articles qui suggèrent que c'est parce que mon site est déterminé comme étant 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 miracle, et non la solution réelle.

Idéalement, j'aimerais avoir ce qui suit:

  1. L'utilisateur navigue sur mon site
  2. Dans les coulisses, leur nom d'utilisateur Windows est récupéré et authentifié par rapport aux utilisateurs autorisés gérés par l'application
  3. L'utilisateur s'est authentifié avec succès, la page se charge, l'utilisateur n'est pas le plus sage qu'il a été authentifié

Que dois-je faire pour y parvenir?

Merci d'avance pour votre aide. Veuillez me faire savoir si je peux fournir plus de contexte.

Modifier: J'ai oublié d'ajouter Je l'exécute sous Windows 7 SP1, IIS 7.5

0
Michael H 4 juil. 2017 à 07:38

2 réponses

Meilleure réponse

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

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

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

Essayez de les changer

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

De cette façon, vous refusez d'abord les demandes anonymes afin que le pipeline d'authentification puisse même renvoyer 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
Wiktor Zychla 4 juil. 2017 à 07:37

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

0
Houssam Hamdan 4 juil. 2017 à 07:23