#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() ">");