Получить имя пользователя Windows для посетителей в C # - PullRequest
0 голосов
/ 23 июня 2010

Довольно плохо знаком с ASP.Net, и я был бы признателен за помощь. Есть ли способ получить имя пользователя Windows NT посетителя сайта, не заставляя его войти в систему? Единственное, что я могу получить - это имя пользователя, который вошел на мой веб-сервер. Например, имя входа в систему John Doe для Windows - jdoe, а имя Joe Smith - jsmith. Если бы на моей странице был код для отображения их имени пользователя для John Doe, он отображал бы «Welcome jdoe», а для Joe Smith - «Welcome jsmith». «

В конечном итоге я буду использовать эту информацию для запроса в активном каталоге таких вещей, как электронная почта, имена и фамилии и т. Д.

Заранее спасибо!

Ответы [ 5 ]

1 голос
/ 23 июня 2010

Без входа в систему хотя бы один раз (или аутентификации с использованием openId) будет очень сложно (возможно, даже невозможно) сделать это с внешними (интернет) веб-пользователями.

И вот почему:

Это проблема курицы и яйца.

Когда ваша страница ASP запущена, она работает как процесс IIS, поэтому по умолчанию любая учетная запись, на которой запущен IIS, будет зарегистрированной в системе.

Итак, вы не представляете, какую учетную запись выдавать себя за другого. Даже если вы знаете, какая учетная запись, у вашего IIS не должно быть подходящих разрешений для олицетворения произвольной учетной записи без предоставления учетных данных (т. Е. Входа в систему).

Если подумать, это огромная угроза безопасности, поскольку вы просто можете отображать имя пользователя Windows на любой странице.

Не входя в систему, вы можете просто запросить у пользователя имя пользователя и сохранить это значение в файле cookie или LSO. Затем каждый раз, когда пользователь посещает вашу страницу, вы читаете куки и распечатываете значение. Если файл cookie удален, просто предоставьте пользователю диалоговое окно с просьбой сохранить свое имя пользователя. Очевидно, что это не поможет вам, когда вы хотите выполнить поиск в AD (и вы не должны обеспечивать внешний поиск AD без аутентификации - в целях безопасности).

Единственный реальный подход заключается в том, чтобы потребовать от пользователей входа в систему (если вы хотите предоставить пользовательский интерфейс).

1 голос
/ 23 июня 2010

Вам нужно, чтобы пользователь вошел в систему;у вас нет другого способа получить их имя пользователя.Браузер намеренно не позволит вам получить эту информацию.

Вы можете использовать аутентификацию Windows в ASP.NET, изменив узел аутентификации в файле web.config:

<authentication mode="Windows">
</authentication>

Как только вы это сделаете, у вас будет достаточно информации, чтобы легко запросить AD.

0 голосов
/ 23 июня 2010

Вы можете выполнить запрос LDAP для получения отображаемого имени свойства активного каталога или фамилии имени на основе samaccountname = jdoe

0 голосов
/ 23 июня 2010

Если ваш сайт находится в интрасети, ваши пользователи используют Internet Explorer, и вы включаете «Интегрированную аутентификацию Windows», а ваше приложение ASP.NET разрешает аутентификацию Windows , тогда ваше приложение ASP.NET может искатьпользователь в активном каталоге / Local Users and Computers, использующий этот метод:

application.User

.. который вернет объект WindowsPrincipal .

0 голосов
/ 23 июня 2010
...