Подключиться к правильному домену ad с помощью пользователя.Identity.Name ?

#c# #authentication #active-directory

#c# #аутентификация #active-directory

Вопрос:

Я использую User.Identity.Name для входа пользователя в мое веб-приложение.

Затем я запрашиваю AD, чтобы получить свойства для этого пользователя:

 string[] sx = User.Identity.Name.Split('\');
var username = sx[sx.Count() - 1];

DirectorySearcher searcher = new DirectorySearcher();
searcher.Filter = string.Format(Filter, username);
SearchResult user = searcher.FindOne();
  

Теперь я хочу добавить поддержку домена:

 string[] sx = UserIdentityName.Split('\');
var username = sx[sx.Count() - 1];
var domain = sx[0];

DirectoryEntry entry = new DirectoryEntry("LDAP://DC="   domain));
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = string.Format(Filter, username);
SearchResult user = searcher.FindOne();
  

Это не работает, возможно, потому, что домен не является полностью квалифицированным. Так что у меня есть, DC=intra где мне было бы нужно DC=intra,DC=contoso,DC=com , и DC=sub где мне было бы нужно DC=sub,DC=intra,DC=contoso,DC=com .

Как я могу подключиться к правильному домену AD? Могу ли я получить полное имя пользователя (UPN name) для пользователя, который вошел в систему, или я могу получить правильный домен AD для пользователя, вошедшего в систему, или как я могу этого добиться?

Ответ №1:

Это не сработает, как вы обнаружили. Вместо этого выполните привязку на основе SID, используя что-то вроде этого:

 WindowsIdentity current = (WindowsIdentity)User.Identity;
DirectoryEntry userObject = new DirectoryEntry("LDAP://<SID="   current.User.ToString()   ">");