Existe-t-il un moyen d'utiliser un identifiant provenant de la liste de mots de passe enregistrée de l'utilisateur et de l'utiliser à la place des informations d'identification Windows locales?Comment faire une recherche dans Active Directory lorsque vous êtes appelé à distance?
Je dois rechercher l'adresse e-mail d'un utilisateur en fonction de son nom d'utilisateur Active Directory pour lui permettre de s'inscrire aux mises à jour par e-mail via un site intranet. Cela semble assez facile si l'utilisateur est effectivement connecté à une machine directement qui fait partie du domaine - je peux utiliser leur nom d'identité pour rechercher l'AD en fonction de leur nom d'utilisateur:
using(DirectoryEntry root = new DirectoryEntry("LDAP://admachine.domain.local"))
{
using(DirectorySearcher searcher = new DirectorySearcher(root))
{
// strip the domain from the username and find the user in AD
var username = Regex.Replace(Page.User.Identity.Name, @".*\\", string.Empty);
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = string.Format("(&(objectCategory=user)(objectClass=person)(sAMAccountName={0}))", username);
var foundUser = searcher.FindOne();
// error checking occurs here...
var email = foundUser.Properties["mail"][0].ToString();
// TODO: stuff with the email address
}
}
Cependant, si vous travaillez à partir d'un PC à la maison cela ne fonctionne pas. Page.Identity.Name
résout le nom que je suis connecté sur mon propre PC (MyMachine\Dave
), en ignorant les informations d'identification stockées que j'avais l'habitude de m'authentifier avec mon domaine de travail (WorkDomain\dave.downs
). Le DirectoryEntry
ramasse et utilise très bien les informations d'identification enregistrées, ce qui me permet de réellement lier et rechercher l'AD, mais je ne trouve pas un moyen de l'utiliser comme var username
, qui contiendra ma machine locale nom d'utilisateur à la place.
Existe-t-il un moyen de faire ce que j'essaie réellement de faire, ou est-ce que je me contente de me tromper/de me heurter la tête contre un mur de briques?
Comment l'authentification du serveur Web est-elle configurée et comment vous connectez-vous exactement? Je suis un peu confus que "Page.User.Identity.Name" peut être le nom d'utilisateur Windows d'une machine complètement non approuvée de l'extérieur du domaine - au moins lorsque l'authentification Windows a été utilisée. – Tomalak
L'authentification est actuellement définie sur Windows et je compose à l'aide d'un client VPN Cisco. En plus de composer avec le client, je dois aussi fournir mon nom d'utilisateur et mon mot de passe si je veux faire quoi que ce soit sur le domaine, comme les navigateurs, afin que cela soit configuré dans ma liste de mots de passe gérés. –
Etes-vous sûr que l'authentification Windows est également * utilisée * lorsque vous êtes connecté à distance? Y a-t-il des chances que le navigateur utilise néanmoins une authentification de base? Je suspecte encore une erreur de configuration/mésaventure ici ... – Tomalak