2016-07-11 2 views
0

J'ai créé un MVC 5 Application avec l'authentification Windows,mauvais utilisateur/mot de passe n'a pas vérifié à AD

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

J'ai sous le code pour obtenir le nom d'affichage de l'utilisateur ainsi que je veux aussi faire la validation,

protected void Session_Start(object sender, EventArgs e) 
    { 

     if (Context.User != null) 
     { 
      MapUserADDetails(Context.User); 
     } 
    } 

    private void MapUserADDetails(IPrincipal user) 
    { 

     using (HostingEnvironment.Impersonate()) 
     using (var domain = new PrincipalContext(ContextType.Domain, "test.com")) 
     using (var usr = UserPrincipal.FindByIdentity(domain, user.Identity.Name)) 
     { 
      if (usr == null) 
      { 
       return; 
      } 

      Session.Add("UserDisplayName", usr.DisplayName); 
     } 
    } 

Maintenant, je suis hébergé cette application à IIS avec seulement l'authentification de Windows activée. Quand je suis en train de naviguer, il est rapide pour userName et mot de passe, enter image description here

Question,

Même je suis entrée mauvais nom d'utilisateur/mot de passe ou même ne remplit pas quoi que ce soit, il est capable de chercher Nom d'affichage.

Comment limiter cela? Utilisateur/Passe doit être valide contre l'AD. Veuillez suggérer. Merci!

Répondre

0

Cela ressemble à un problème de configuration IIS et non au code.

Pour dépanner:

  • vérifier si IE se comporte différemment
  • assurez-vous que IIS ne dispose que l'authentification Windows est activée et non par exemple anonyme (voir Receiving login prompt using integrated windows authentication)
  • assurez-vous que la page n'a pas d'autres ressources (par exemple des images) utilisées d'autre endroit nécessitant une authentification (peut-être que l'invite est pas la page mais pour les ressources intégrées en elle)
  • vérifier les paramètres du navigateur (par exemple dans IE ce site pourrait devoir être ajouté dans Intranet Zone, ou "Connexion automatique avec le nom d'utilisateur et mot de passe actuel" n'est pas activé)
0

Vous ne validez actuellement aucune combinaison nom d'utilisateur/mot de passe. UserPrincipal.FindByIdentity vérifie uniquement si l'utilisateur est trouvé dans AD.

Pour valider les informations d'identification de l'utilisateur, vous devez vérifier:

using (var domain = new PrincipalContext(ContextType.Domain, "test.com")) 
{ 
    bool authenticated = domain.ValidateCredentials(user.Identity.Name, password); 
    if (!authenticated) 
    { 
     // Do stuff 
    } 
} 

Vous pouvez vérifier MSDN pour plus d'informations.

+0

Merci, mais s'il vous plaît laissez-moi savoir comment passer le mot de passe, comme nous don ' J'ai un écran de connexion et j'utilise l'authentification Windows. – user584018

+0

On dirait que vous ne pourrez pas le faire fonctionner alors. Je ne vois pas comment vous pouvez valider un compte utilisateur sans mot de passe. Simplement valider si un utilisateur existe, sonne comme un risque de sécurité pour moi, mais c'est un choix que vous faites. Si vous souhaitez utiliser l'authentification Windows avec IIS, vous devez vous assurer que les paramètres de sécurité dans Internet Options sont correctement configurés. – Ronald

+0

Ah, maintenant je comprends: vous voulez contourner la connexion et réutiliser l'utilisateur actuellement connecté à partir de Windows. Dans ce cas, vous n'avez plus besoin de valider contre AD, puisque Windows l'a déjà fait pour vous. Assurez-vous que votre site figure dans la liste des sites Intranet (ou Intranet local) du panneau de configuration Options Internet. Ensuite, vous pouvez vérifier 'User.Identity.IsAuthenticated' sans valider avec un mot de passe. – Ronald