50 votes

Mélanger l'authentification des formulaires avec l'authentification Windows

J'ai une application intranet (ASP.NET 3.5) qui a été conçue pour utiliser l'authentification par formulaire (avec le système d'appartenance aspnet par défaut). Je stocke également des informations supplémentaires sur les utilisateurs dans une autre table qui partage sa clé primaire avec la table aspnet_users.

Pour les utilisateurs faisant partie de notre domaine, je stocke leur nom de compte de domaine dans la table secondaire des utilisateurs, et je veux connecter automatiquement les utilisateurs dont le nom de compte de domaine correspond à un nom stocké dans la table.

J'ai lu les guides disponibles - ils datent tous de plus de deux ans et supposent que vous êtes en mesure d'activer l'authentification Windows sur une page de connexion distincte qui vous permet d'extraire le nom de compte de domaine. D'après ce que je peux comprendre, cependant, cela n'est pas possible dans IIS7 (la méthode d'authentification globale est appliquée sur toutes les pages et ne peut pas être désactivée sélectivement, et les deux méthodes d'authentification ne peuvent pas être appliquées sur la même page).

Y a-t-il un moyen de faire en sorte que IIS transmette le nom de compte de domaine Windows de l'utilisateur demandeur ? Je n'ai pas besoin d'une authentification AD correcte, juste du nom de domaine.

49voto

Dan F Points 7777

En fait, vous pouvez le faire. Un peu tard pour @dr_draik, mais cela est apparu dans un résultat Google pour moi, donc j'ai pensé partager quelques connaissances.

Si vous êtes en mode classique - Activez à la fois l'authentification Windows et Forms. Vous recevrez un avertissement indiquant que vous ne pouvez pas faire les deux en même temps, mais vous pouvez l'ignorer. Ensuite, vous pouvez fouiller autour de différentes propriétés comme Code:

HttpContext.Current.Request.ServerVariables["LOGON_USER"]

et récupérer le nom d'utilisateur à partir de là.

Si vous êtes en mode intégré - 4021905 IIS7 Challenge-based and login redirect-based authentication cannot be used simultaneously mène à IIS 7.0 Two-Level Authentication with Forms Authentication and Windows Authentication qui est un module qui vous permet de changer sélectivement l'authentification pour différentes pages.

0 votes

Changement de réponse acceptée car apparemment cette question attire pas mal de visiteurs, et ce sera plus clair de cette manière.

0 votes

La solution pour le mode intégré ne fonctionne pas avec .NET 4.5 et IIS8. Quelqu'un a résolu ce problème ?

1 votes

J'ai désactivé l'authentification Windows et j'utilise uniquement l'authentification par formulaire, et cette HttpContext.Current.Request.ServerVariables ["LOGON_USER"] fonctionne toujours. J'ai besoin de faire cela car parfois nos utilisateurs doivent pouvoir se déconnecter de leur compte Windows et utiliser d'autres informations d'identification pour se connecter. J'ai remarqué que si l'authentification Windows est activée, alors cela n'utilisera pas le nouvel identifiant de formulaire après que l'utilisateur ait changé de compte.

4voto

David Points 20209

Vous pourriez toujours configurer 2 applications distinctes dans IIS7. L'une aurait l'authentification Windows activée. L'autre serait l'application principale avec une authentification par formulaire. Si un utilisateur accédait à l'application d'authentification Windows, la page pourrait récupérer ses informations d'identification et les transmettre à l'application d'authentification par formulaire.

1 votes

Merci, la solution des deux applications semble la plus praticable, mais je pense que nous devrons simplement opter pour l'authentification par formulaire. Il semble plutôt maladroit d'avoir une application séparée juste pour la connexion.

1 votes

La page pourrait récupérer leurs identifiants et les transmettre à l'application d'authentification des formulaires" c'est la partie que je ne comprends pas... les transmettre comment?

4voto

adrianbanks Points 36858

(Plus pour la complétude de l'information vraiment)

J'ai posé cette question à un spécialiste de la sécurité .Net lors d'une conférence il y a quelque temps. Sa réponse a été que c'est techniquement possible, mais qu'il ne l'avait jamais vu faire (et de le prévenir si je le faisais et que ça fonctionnait!).

Il a suggéré que cela pourrait être réalisé en créant votre propre filtre ISAPI et en l'installant dans IIS. Le filtre ISAPI intercepterait les requêtes et ferait essentiellement le travail qu'IIS fait lors de l'utilisation de l'authentification intégrée, mais passerait à l'utilisation de formulaires si cela n'était pas présent. Cela impliquait une logique de challenge/réponse compliquée dans le filtre. C'était pour IIS6 cependant, donc cela pourrait être différent dans IIS7.

Bien que cela soit techniquement possible, je ne recommanderais pas cette méthode car cela semble un peu bidouille, et créer votre propre sécurité n'est jamais vraiment une bonne idée (à moins que vous ne sachiez vraiment ce que vous faites).

1 votes

Merci pour l'input - c'est un peu ennuyant que cela ne soit plus possible (ou soit pratiquement plus possible) mais je suppose que c'est le prix du progrès.

0 votes

Merci d'avoir partagé ces informations! Je suis d'accord avec ce que vous avez dit, il ne faut pas créer notre propre fonctionnalité de sécurité à moins d'être assez sûr.

1voto

dexter Points 2337

Il existe de nombreux articles sur le mélange de l'authentification en définissant la configuration pour utiliser les formulaires tout en autorisant l'accès anonyme à l'application. Deuxièmement, une page d'authentification intégrée devrait être créée avec les paramètres IIS définis pour refuser l'accès anonyme et utiliser l'authentification intégrée. Là, vous verriez le tour de magie en vérifiant la variable "Logon_User" de la collection ServerVariables de la requête. Et finalement, pour que l'authentification intégrée connecte l'utilisateur de manière silencieuse, le nom d'hôte doit être court. Donc, si votre élément d'authentification par formulaire est exposé sur Internet via un FQDN, il devrait y avoir une sorte de redirection vers la page d'hôte court. Je pense qu'il est possible de le réaliser avec juste une application sous IIS avec 2 répertoires virtuels.

1 votes

En ce qui me concerne, cette solution fonctionne sur IIS6, mais pas sur IIS7. Cela est dû au fait que sur IIS6, vous pouvez attribuer le mode d'authentification pour chaque dossier (voire chaque fichier), tandis que sur IIS7, les paramètres d'authentification sont globaux pour toute l'application.

0voto

Krip Points 529

J'ai quelque chose que vous pouvez essayer - je ne suis pas sûr que ça fonctionnera.

Dans le passé, nous avons utilisé Request.ServerVariables["LOGON_USER"] mais évidemment pour que cela retourne une valeur non vide, vous devez désactiver l'accès anonyme.

Voir cet article: http://support.microsoft.com/default.aspx/kb/306359

Il suggère de maintenir l'accès anonyme du côté de IIS, et l'authentification Forms, mais de refuser l'utilisateur anonyme comme suit:

1 votes

Merci - j'ai fait une tentative mais c'est toujours une chaîne vide même avec les paramètres recommandés. J'ai vérifié l'article une deuxième fois et cela ne s'applique pas à IIS7, malheureusement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X