Comment obtenez-vous l'enregistrés dans un compte de domaine Windows à partir d'un ASP.NET application?

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

  •  09-06-2019
  •  | 
  •  

Question

Nous avons une ASP.NET application qui gère son propre Utilisateur, les Rôles et la Permission de base de données, et nous avons récemment ajouté un champ dans la table User pour tenir le compte de domaine Windows.

Je voudrais faire en sorte que l'utilisateur n'a pas à physiquement connectez-vous à notre demande, mais plutôt d'être connecté automatiquement, basée sur le actuellement connecté au compte de domaine Windows de DOMAINE om d'utilisateur.Nous voulons pour authentifier le compte de domaine Windows à l'encontre de notre propre table Utilisateur.

C'est un morceau de gâteau pour faire en Windows Forms, est-il possible de le faire dans des Formulaires Web?

Je ne veux pas que l'utilisateur soit invité avec un Windows défi de l'écran, je veux que notre système pour gérer la connexion.

Précisions:Nous utilisons notre propre objet Principal.

Précisions:Vous ne savez pas si cela fait une différence ou pas, mais nous sommes à l'aide de IIS7.

Était-ce utile?

La solution

Je n'ai à peu près exactement ce que vous voulez faire il y a quelques années.Im essayant de trouver un peu de code pour elle, mais c'était lors d'un précédent travail de manière à ce que le code est à la maison.

Je ne m'en souviens bien que j'ai utilisé cet article comme point de départ.Vous définissez le fournisseur LDAP si vous pouvez réellement exécuter une vérification de l'utilisateur vs le LDAP.Une chose assurez-vous de si vous essayez de l'LDAP approche.Dans le fichier de configuration où vous définissez le LDAP assurez-vous que LDAP est tout en majuscule, si ce n'est pas qu'il ne permettra pas de résoudre.

Autres conseils

L'intégration de ce genre est au niveau du serveur, c'est IIS qui décide que l'utilisateur n'est pas connecté;et c'est IIS qui renvoie l'invite d'authentification de l'utilisateur, le navigateur réagit.

Que vous voulez utiliser la connexion de domaine il y a une seule façon de le faire; l'authentification intégrée de windows.Cela ne fonctionne que si le serveur IIS est également partie du domaine et les utilisateurs d'accéder à la machine directement, sans passer par un proxy, et de machines qui font également partie du domaine (avec les utilisateurs convenablement connecté).

Cependant personnalisé de votre objet principal peut créer l'amusement et les jeux;l'authentification de ce type sera un WindowsPrincipal et un WindowsIdentity;auquel vous pouvez accéder via l'objet Utilisateur (voir Comment:Utiliser l'Authentification Windows dans ASP.NET 2.0)

Je suppose que vous voulez une entité personnalisée à cause de vos rôles personnalisés?Je doute que vous pouvez obtenir les deux de jouer gentiment;vous pouvez créer un personnalisé fournisseur de rôle qui regarde votre magasin de données ou de regarder les regarder ADAM, une extension AD qui offre des rôles en fonction du programme et est livré avec de beaux outils de gestion.

using System.Security.Principal;
...
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User;

pour obtenir le courant d'utilisateur de domaine.Bien sûr, vous devez assurez-vous que l'IIS est configuré pour gérer l'Authentification Windows.

Cela peut être utile:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent();

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity);

string name = myPrincipal.Identity.Name;
string authType = myPrincipal.Identity.AuthenticationType;
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString();

string identName = myIdentity.Name;
string identType = myIdentity.AuthenticationType;
string identIsAuth = myIdentity.IsAuthenticated.ToString();
string iSAnon = myIdentity.IsAnonymous.ToString();
string isG = myIdentity.IsGuest.ToString();
string isSys = myIdentity.IsSystem.ToString();
string token = myIdentity.Token.ToString();

Avertissement:Je l'ai obtenu à partir d'un article technet, mais je ne trouve pas le lien.

Vous pouvez utiliser System.Threading.Thread.CurrentPrincipal.

Demande.ServerVariables["REMOTE_USER"]

Ceci est vérifié pour votre installation, mais je me souviens d'utiliser ce temps de retour.

Essayez De Demande.ServerVariables("LOGON_USER").

Si le répertoire des options de sécurité sont définies de sorte que ce répertoire n'autorise pas les utilisateurs anonymes, lorsque l'internaute atteint cette page, ils seront invités à la norme modale de dialogue demandant le nom d'utilisateur et mot de passe.Demande.ServerVariables("LOGON_USER") sera de retour cet utilisateur.

Cependant, ce ne sera probablement pas travailler pour vous parce que vous êtes à l'aide de vos propres objets de sécurité.Si vous pouvez comprendre comment le faire autour de cette zone de connexion, ou de passer en NT informations d'identification sur le site avant qu'il pose pour eux, alors vous seriez tous ensemble.

Avez-vous pensé à l'usurpation d'identité?Vous pouvez stocker de l'utilisateur NT informations d'identification d'ouverture de session dans votre personnalisé de sécurité de l'objet, et puis juste impseronate l'utilisateur via le code le cas échéant.

http://msdn.microsoft.com/en-us/library/aa292118(SV.71).aspx

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