Authentification par formulaires mélangés avec authentification Windows

J’ai une application intranet (ASP.NET 3.5) qui a été conçue pour utiliser l’authentification par formulaires (avec le système d’adhésion par défaut d’aspnet). 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 qui font partie de notre domaine, je stocke leur nom de compte de domaine dans la table des utilisateurs secondaires et je souhaite 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 d’il y a deux ans ou plus et supposons que vous pouvez activer l’authentification Windows sur une page de connexion distincte qui vous permet d’extraire le nom du compte de domaine. D’après ce que je peux dire, 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 de manière sélective, et les deux méthodes d’authentification ne peuvent pas être appliquées sur la même page).

Existe-t-il un moyen de faire passer IIS via le nom du compte de domaine Windows de l’utilisateur demandeur? Je n’ai pas besoin d’une authentification AD correcte, juste le nom de domaine.

En fait, vous pouvez le faire. Un peu tard pour @dr_draik, mais cela a été un résultat pour moi, alors j’ai pensé partager quelques connaissances.

Si vous êtes en mode classique – Activez l’authentification Windows et Forms. Vous serez averti de ne pas pouvoir faire les deux à la fois, mais vous pouvez l’ ignorer . Ensuite, vous pouvez explorer différentes propriétés comme Code:

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

et pêcher le nom d’utilisateur de là.

Si vous êtes en mode intégré – 4021905 L’authentification basée sur la redirection IIS7 Challenge et la connexion redirigée ne peuvent pas être utilisées simultanément pour conduire à l’ authentification à deux niveaux IIS 7.0 avec authentification par formulaires et authentification Windows, qui vous permet de modifier différentes pages.

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

(Plus pour l’exhaustivité des informations vraiment)

J’ai demandé à un spécialiste de la sécurité .Net cette question lors d’une conférence il y a quelque temps. Sa réponse était que c’est techniquement possible, mais il ne l’avait jamais vu faire (et de lui faire savoir si je l’avais fait et ça a fonctionné!).

Il a suggéré que la façon de procéder était de créer votre propre filtre ISAPI et de l’installer dans IIS. Le filtre ISAPI intercepterait les requêtes et ferait essentiellement le travail effectué par IIS lors de l’utilisation de l’authentification intégrée, mais utiliserait des formulaires si cela n’était pas présent. Cela impliquait une logique complexe de challenge / réponse dans le filtre. C’était pour IIS6, donc, cela pourrait être différent dans IIS7.

Bien que cela puisse être techniquement possible, je ne suggérerais pas cette voie car elle ressemble à un bidouillage, et lancer votre propre sécurité n’est jamais vraiment une bonne idée (à moins que vous ne sachiez vraiment ce que vous faites).

Il existe de nombreux articles sur le mélange de l’authenticaton en définissant config pour utiliser les formulaires permettant un access anonyme à l’application. Deuxièmement, une page d’authentification intégrée doit être créée avec les parameters IIS définis pour refuser l’anonymat et utiliser l’authentification intégrée. Vous y trouverez le tour de magie en vérifiant la variable “Logon_User” de la collection ServerVariables de la requets. Enfin, pour que l’authentification intégrée se connecte en mode silencieux, l’utilisateur doit avoir un nom d’hôte court. Donc, si votre pièce d’authentification de formulaires est exposée à Internet via le nom de domaine complet, il devrait y avoir une sorte de redirection vers la page hôte courte. Je pense qu’il est possible de réaliser avec une seule application sous IIS avec 2 répertoires virtuels.

J’ai trouvé une solution sans ajouts spéciaux. C’était délicat et consistait à bricoler des éléments de toutes les pages référencées ici. J’ai posté à ce sujet: http://low-bandwidth.blogspot.com.au/2014/11/iis7-mixed-windows-and-forms.html

Essentiellement, les formulaires, les fenêtres et l’authentification anon doivent être activés. L’écran de connexion doit être basé sur des formulaires et contenir un bouton pour déclencher la connexion Windows, qui émet un défi de réponse HTTP 401 qui, en cas de succès, crée un ticket de connexion basé sur des formulaires.

Les problèmes sont assez complexes et la publication passe en revue les principes et la solution en détail.

Malheureusement, ce que vous essayez de faire n’est tout simplement pas pris en charge. Pour que ASP.NET connaisse le nom d’utilisateur Windows, vous devez utiliser l’authentification Windows.

Vous pouvez configurer un autre site / répertoire virtuel pour transférer les informations de nom d’utilisateur vers une autre page. Mais que se passe-t-il lorsque des utilisateurs non authentifiés par Windows tentent de se connecter?

J’ai quelque chose à essayer – je ne sais pas si ça va marcher.

Dans le passé, nous avons utilisé Request.ServerVariables["LOGON_USER"] mais évidemment, pour que cela renvoie une valeur non vide, vous devez désactiver l’access anonyme.

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

Il suggère de conserver l’access anonyme du côté des services Internet (IIS) et l’authentification par formulaires, mais de refuser l’utilisateur anonyme comme suit: