C# 在ASP.NET Core和DirectoryServices中,我是否可以从电子邮件地址而不是用户名获取用户身份?

C# 在ASP.NET Core和DirectoryServices中,我是否可以从电子邮件地址而不是用户名获取用户身份?,c#,asp.net,asp.net-core,active-directory,C#,Asp.net,Asp.net Core,Active Directory,我需要用户能够输入电子邮件地址,单击“提交”后,我想从输入的电子邮件地址中获取一些Active Directory信息。不幸的是,我们的用户名没有遵循单一的命名约定,因此我无法根据输入的电子邮件地址可靠地猜测用户名 public string GetManagersName(string emailAddress) { string userName = GetManagersUserNameByEmailAddress(emailAddr

我需要用户能够输入电子邮件地址,单击“提交”后,我想从输入的电子邮件地址中获取一些Active Directory信息。不幸的是,我们的用户名没有遵循单一的命名约定,因此我无法根据输入的电子邮件地址可靠地猜测用户名

        public string GetManagersName(string emailAddress)
        {
            string userName = GetManagersUserNameByEmailAddress(emailAddress);

            PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
            UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, userName);

            string managersName = usr.GivenName;

            return managersName;
        }

        private string GetManagersUserNameByEmailAddress(string emailAddress)
        {
            DirectorySearcher adSearcher = new DirectorySearcher();
            adSearcher.Filter = ("mail=" + emailAddress);
            adSearcher.PropertiesToLoad.Add("samaccountname");

            SearchResult result = adSearcher.FindOne();

            DirectoryEntry user = result.GetDirectoryEntry();

            string userName = user.Properties["samaccountname"].Value.ToString();

            return userName;
        }
我可以通过用户名查找信息,有没有办法从使用DirectoryServices或类似工具输入的电子邮件地址追溯到身份

谢谢

编辑并澄清:

在表单上,我要查找的不是经过身份验证的用户电子邮件地址,而是表单中输入的电子邮件地址

    public class ManagerDetails
    {
        public string GetManagersName(string emailAddress)
        {
            PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
            UserPrincipal mgr = UserPrincipal.FindByIdentity(ctx, emailAddress);

            string managersName = mgr.GivenName;

            return managersName;
        }
    }
这段代码可以工作,但前提是用户名与电子邮件地址匹配

例如,乔,这很有效。Bloggs@mydomain.com(电子邮件)和Joe.Bloggs(域用户名)

如果是乔。Bloggs@mydomain.com(电子邮件)和BloggsJ(域用户名)失败


这显然是因为它使用电子邮件地址作为完整的用户名,但希望它能解释我试图实现的目标。

我仍在改进,但这是可行的,它允许我使用目录搜索器从输入的电子邮件地址中获取名称

        public string GetManagersName(string emailAddress)
        {
            string userName = GetManagersUserNameByEmailAddress(emailAddress);

            PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
            UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, userName);

            string managersName = usr.GivenName;

            return managersName;
        }

        private string GetManagersUserNameByEmailAddress(string emailAddress)
        {
            DirectorySearcher adSearcher = new DirectorySearcher();
            adSearcher.Filter = ("mail=" + emailAddress);
            adSearcher.PropertiesToLoad.Add("samaccountname");

            SearchResult result = adSearcher.FindOne();

            DirectoryEntry user = result.GetDirectoryEntry();

            string userName = user.Properties["samaccountname"].Value.ToString();

            return userName;
        }

也许你可以展示你现在是如何查找用户的,然后我们可以帮助指导你?那么,如果一名员工离职,而另一名新员工收到相同的电子邮件,会发生什么情况呢?你可以通过电子邮件在广告中查找(这就是
目录
的意思),但你不能用它来验证。至于从广告帐户获取信息,同样,你可以从你已经验证的帐户获取信息,而不是从电子邮件。是的,您可以通过电子邮件查找帐户,用户帐户是您已经验证过的帐户,您已经可以访问其配置文件。可能添加了更多信息的副本,希望它能澄清我正在尝试的操作。如果您还想包括辅助电子邮件地址(因为任何帐户都可以分配多个电子邮件地址)然后您可以使用
adSearcher.Filter=(“proxyAddresses=smtp:+emailAddress”);
碰巧我遇到了这个问题。谢谢。