2009-09-10 4 views
2

Mon entreprise a une grande application, nous finissons. Il utilise WCF comme back-bone avec Active Directory pour l'authentification. Cela fonctionne parfaitement pour l'un des deux sites car le modèle d'authentification est Windows et vous devez faire partie du domaine pour vous connecter au site. La question que j'ai se rapporte à l'autre site qui est accessible de l'extérieur. Il définit ClientCredentials.Windows.ClientCredential pour l'appel proxy avec un utilisateur/une passe spécifique pour l'usurpation d'identité d'un utilisateur AD afin que le modèle de sécurité complet fonctionne. Tout cela fonctionne exactement comme prévu aussi.Connectez-vous Utilisateur

La question que j'ai est, sur le web, je peux utiliser HttpContext.Current.User.Identity.Name pour obtenir l'utilisateur actuellement connecté de la pièce d'authentification Forms, mais pour ce faire, je dois m'assurer qu'un système. La référence Web existe contre la DLL dans laquelle je travaille actuellement. Nos objets de base proviennent d'une classe simpliste qui ne connaît pas System.Web. Existe-t-il un moyen de trouver l'utilisateur Forms qui est connecté dans ce projet d'objet de base? J'ai essayé System.Security.Principal mais cela me donne seulement l'accès aux comptes de Windows de ce que je pourrais dire et ne me fera aucun bien.

Je sais qu'une option est de simplement référencer System.Web et d'en finir avec cela, mais cela me semble vraiment compliqué et pas la meilleure option donc j'espère avoir quelques conseils ici.

Répondre

4

Thread.CurrentPrincipal.Identity fera exactement la même chose que HttpContext.CurrentContext...

Il retourne l'identité associée à l'exécution courante, qui, dans la plupart des cas, est l'utilisateur connecté *.

Remarque: * Si vous utilisez la délégation/l'emprunt d'identité ou l'exécution en tant que compte de service, il renvoie le compte dont l'identité est associée au thread, mais dans votre cas, cela ne semble pas être le cas. changement d'identité de contexte.

+0

Parfait. Exactement ce que je cherchais. – RubyHaus

2

Si le nom d'utilisateur en tant que chaîne est assez pour vous,

Environment.UserName 
// Environment.UserDomainName and MachineName can also be useful 

De MSDN:

Obtient le nom d'utilisateur de la personne qui a commencé le thread courant.