Получение имени пользователя Windows с компьютера, вошедшего в систему, через приложение интрасети

Как приложение, работающее на производственном сервере, может получить доступ к имени пользователя для входа на машину, с которой пользователь обращается к приложению? Например, в настоящее время я подключился к своей машине в корпоративной интрасети INTRA. Мое имя пользователя будет INTRA \ Username.

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

В настоящее время я использую следующий код для доступа к имени пользователя:

 Private username As String = Thread.CurrentPrincipal.Identity.Name

Это отлично работает на localhost, но при аутентификации в базе данных на сервере разработки я получаю следующую ошибку:

Не удалось войти в систему для пользователя NT AUTHORITY \ ANONYMOUS LOGON.

Это неправильный подход? Возможно ли это вообще или это слишком большая проблема безопасности? Это приложение будет внутренним приложением интрасети, работающим в магазине IE. Соответствующие части web.config, которые уже существуют, включают:

    <identity impersonate="true"/>
    <authentication mode="Windows"/>
    <authorization>
        <deny users="?"/>
    </authorization>

<connectionStrings>
    <add name="CONNSTR" connectionString="Initial Catalog=DATANAME;Data Source=servername;Integrated Security=True;" providerName="System.Data.SqlClient"/>
</connectionStrings>

person Community    schedule 19.10.2009    source источник
comment
Какую строку подключения к базе данных вы используете?   -  person DancesWithBamboo    schedule 19.10.2009
comment
Добавил в описание. Спасибо   -  person    schedule 19.10.2009


Ответы (3)


При настройке веб-приложения на сервере вам необходимо зайти в раздел «Безопасность документов» (его название меняется в зависимости от того, какая версия IIS запущена на вашем сервере, но это что-то вроде этого), отключить анонимную аутентификацию и включить при проверке подлинности Windows. Это говорит серверу запросить аутентификацию входа в Windows из браузера. (Возможно, кто-то, кто знает web.config файлы лучше, чем я [почти любой], может отредактировать это, чтобы указать на соответствующий бит; я не думаю, что это impersonate, но если бы я знал, я бы сказал. Я пока только сделал это через пользовательский интерфейс.)

person T.J. Crowder    schedule 19.10.2009
comment
К сожалению, это не изменило мою ошибку. Однако это кажется разумным и, вероятно, доставило бы мне проблемы позже. Спасибо - person ; 19.10.2009

в вашем примере вы определяете имя пользователя, под которым работает ваш веб-сервер. Вам нужно имя пользователя, обращающегося к странице.

Попробуйте что-то вроде этого:

person Colin Pickard    schedule 19.10.2009
comment
Я прочитал эту статью и не вижу ничего, что могло бы решить эту проблему. Есть ли конкретная часть, о которой вы говорите? - person ; 19.10.2009
comment
Я подумал, что это может быть что-то вроде <authentication mode="Windows"/><identity impersonate="true"/>. Но, читая ваши обновления, похоже, вы уже это делаете. Извините, я больше ничем не помог :( - person Colin Pickard; 19.10.2009

Если установка для безопасности каталога «Проверка подлинности Windows» не работает, измените ее на «Обычная проверка подлинности». Вам также необходимо указать доменное имя для аутентификации. Это был единственный способ заставить безопасность распространяться от уровня IIS к БД. К сожалению, это приводит к тому, что имя пользователя и пароль отправляются в виде открытого текста. Это не лучшее решение, но, поскольку все было в интрасети, оно работало, пока мы работали над обновлением нашей процедуры входа в систему.

person Dillie-O    schedule 19.10.2009
comment
Это решение актуально, но далеко от идеала. Я просто хочу прочитать информацию с авторизованного компьютера. Я не хочу, чтобы пользователю приходилось вводить имя пользователя или пароль. - person ; 19.10.2009