Application ASP.NET pour s'authentifier auprès d'Active Directory ou de SQL via l'authentification Windows ou l'authentification par formulaire

StackOverflow https://stackoverflow.com/questions/306652

Question

Je suis en train d'écrire une application qui nécessitera plusieurs formes d'authentification.

L’application devra prendre en charge l’authentification auprès d’Active Directory, mais pourra également basculer vers un fournisseur d’appartenance SQL si l’utilisateur ne se trouve pas dans Active Directory. Nous pouvons gérer les défaillances du fournisseur SQL dans un code basé sur le nom d'utilisateur fourni, car le nom d'utilisateur sera dans un format différent du nom d'utilisateur Active Directory.

Est-ce même possible? Ce que je veux dire, c’est que je peux utiliser un abonnement et utiliser à la fois ActiveDirectoryMembershipProvider et SqlMembershipProvider ou devrais-je obtenir le mien?

Une autre complexité supplémentaire est que je souhaite authentifier automatiquement mes utilisateurs internes basés sur l'authentification Windows auprès d'AD, mais utiliser l'authentification par formulaire pour les utilisateurs n'appartenant pas à notre réseau interne ou ceux utilisant le fournisseur SQL.

Il s'agira probablement de serveurs distincts, l'un interne et l'autre externe. J'ai donc beaucoup de planification à faire pour comprendre la réplication des données et la manière dont je vais authentifier les utilisateurs AD s'ils frappent le serveur extérieur, etc.

Je me demande quelles sont les pensées qui règnent au moment de commencer cette route. Est-ce que ce que je veux faire est même possible sans moi, ou existe-t-il un moyen de les combiner?

Merci pour la réponse.

La raison de ma demande initiale était parce que je pouvais utiliser ce senerio spécifique il y a environ 7 ans en utilisant IIS pour s'authentifier, puis en renvoyant les informations d'identification à une application Web Lotus Domino Server. Si l'utilisateur n'était pas authentifié via l'authentification Windows / ISS, Domino se chargerait de l'authentification. C’était ce que je cherchais à faire ici, mais je ne pouvais vraiment pas trouver un moyen de le faire fonctionner dans IIS.

En ce qui concerne le reste de votre réponse, je pense que vous êtes sur la voie à suivre. J'ai réfléchi à cela et je l'ai beaucoup jeté dans la tête. De toute façon, l'application sera quelque peu différente sur les deux serveurs, car l'accès aux données sur le serveur externe sera de toute façon limité. Étant donné que tant de choses vont être différentes, je peux traiter ces applications comme deux applications, éliminant ainsi la nécessité d’utiliser de toute façon deux types d’authentification dans la même application.

Je joue déjà avec l'idée d'écrire ma propre fenêtre d'authentification / connexion pour le serveur externe, et si l'utilisateur essaye de se connecter avec ses informations d'identification AD sur le serveur externe, je serai en mesure de détecter cela et de les rediriger. au serveur interne. S'ils ne sont pas sur le réseau local ou sur un VPN, ils n'auront tout simplement pas accès. Cette partie a encore du chemin à parcourir, donc je ne suis pas sûr.

Autre idée: y at-il un moyen d’en extraire juste assez d’AD dans une base de données SQL pour me permettre d’authentifier les utilisateurs auprès du serveur externe à partir du serveur externe à l’aide de leurs informations d’authentification AD, sans créer de problèmes de sécurité? J'espère que je tape clairement ce que je pense ....

Merci encore!

Tim

Était-ce utile?

La solution

C’est ainsi que j’ai géré une situation similaire sur la base de cette information :

  1. a configuré l'application pour qu'elle utilise l'authentification par formulaires.
  2. Définissez LoginUrl sur une page appelée WinLogin.aspx.
  3. Dans WinLogin.aspx, utilisez Request.ServerVariables ["LOGON_USER"] pour obtenir le nom d'utilisateur, puis appelez FormsAuthentication.RedirectFromLoginPage (allowedUserName, false) pour les consigner. Je suppose que vous pouvez vérifier manuellement Active Directory à cet endroit. .
  4. Créez une page HTML qui redirige vers une page appelée Login.aspx
  5. Login.aspx est votre nom d'utilisateur / mot de passe standard.
  6. Dans IIS, activez l'authentification intégrée et anonyme sur l'ensemble du site, mais refusez l'accès anonyme à WinLogin.aspx.
  7. Dans IIS, définissez vos erreurs 401 sur la page créée à l'étape 3.

En gros, lorsqu'un utilisateur non authentifié accède au site, il est redirigé vers WinLogin.aspx. Étant donné que la fonction anonyme est désactivée, la sécurité intégrée effectue une vérification. Si cela réussit, votre code personnalisé dans WinLogin peut être exécuté. Si le contrôle de sécurité intégré échoue, une erreur 401 se produit. Votre page 401 personnalisée redirige vers Login.aspx où l'utilisateur peut se connecter à l'aide de son nom d'utilisateur et de son mot de passe avec le fournisseur SQL.

Autres conseils

Pour autant que je sache, les applications Web sont configurées pour utiliser l'authentification Windows ou l'authentification par formulaire, mais pas les deux. Par conséquent, je ne pense pas qu'il soit possible d'authentifier automatiquement les utilisateurs internes tout en demandant aux autres de saisir un nom d'utilisateur / mot de passe.

Vous pouvez vous authentifier auprès d'Active Directory ou d'un magasin d'utilisateurs SQL via l'authentification par formulaires à l'aide d'un fournisseur personnalisé. Cependant, les utilisateurs AD devront toujours entrer leur nom d'utilisateur et leur mot de passe. Bien que je n’aie jamais combiné ces deux méthodes, j’ai utilisé l’authentification par formulaires pour s’authentifier à un moment ou à un autre auprès des deux sources.

Cela dit, je pense que vous voudrez peut-être envisager de réduire la "flexibilité". de votre système. Si vous avez un serveur externe et un serveur interne, vous pouvez simplement modifier la configuration du fournisseur sur chaque copie de l'application pour utiliser une source différente. Vous pouvez ensuite configurer l'interne pour utiliser l'authentification Windows (automatique) et l'externe pour utiliser l'authentification par formulaires.

IMHO, je pense que les utilisateurs internes ne devraient pas utiliser le serveur externe pour accéder à l'application. S'ils le sont, ils doivent avoir un compte d'utilisateur enregistré en SQL, complètement séparé de leur compte AD. Fondamentalement, lorsque quelqu'un accède à l'application en externe, il agit en tant qu'utilisateur externe, indépendamment de son emplacement physique.

Eh bien, il est possible d'utiliser ActiveDirectoryMembershipProvider et SqlMembershipProvider, mais pour cela, vous devez concevoir votre page de connexion avec votre propre code au lieu des contrôles de connexion.

À propos de l’authentification mixte (Windows et Forms), pour autant que je sache, seul IIS 7 facilite les choses et les rend propre. Voir ce post pour plus de détails,

http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication-Authentication.Authentication.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top