Могу ли я получить удостоверение пользователя по адресу электронной почты вместо имени пользователя в ASP.NET Core и DirectoryServices? - PullRequest
0 голосов
/ 15 октября 2019

Мне нужно, чтобы пользователи могли вводить адрес электронной почты, и после нажатия кнопки Отправить я хотел бы получить некоторую информацию Active Directory из введенного адреса электронной почты. Наши имена пользователей, к сожалению, не следуют одному соглашению об именах, поэтому я не могу точно угадать имя пользователя по введенному адресу электронной почты.

Я в порядке с поиском информации по имени пользователя, есть ли способвернуться к идентификации с адреса электронной почты, введенного с помощью 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;
        }
    }

Этот фрагмент кода работает, но только если имя пользователя совпадает с адресом электронной почты.

Например, это работает, Joe.Bloggs@mydomain.com (электронная почта) и Joe.Bloggs (имя пользователя домена).

Если это Joe.Bloggs@mydomain.com (электронная почта) и BloggsJ (имя пользователя домена)это терпит неудачу.

Это очевидно, потому что он использует адрес электронной почты в качестве полного имени пользователя, но, надеюсь, это объясняет, чего я пытаюсь достичь.

1 Ответ

1 голос
/ 15 октября 2019

Я все еще уточняю, но это работает, это позволяет мне использовать поиск по каталогам, чтобы получить имя из введенного адреса электронной почты.

        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;
        }
...