WIN32 вопрос входа в систему - PullRequest
3 голосов
/ 14 мая 2010

Мы разработали веб-приложение ASP.NET 3.5 с Web Server 2008 и внедрили специальное решение для аутентификации с использованием активного каталога в качестве хранилища учетных данных. Наше интерфейсное приложение использует обычную форму входа в систему для ввода имени пользователя и пароля и использует метод Win32 LogonUser для аутентификации учетных данных пользователя. Когда мы вызываем метод LogonUser, мы используем LOGON32_LOGON_NETWORK в качестве типа входа.

Проблема, которую мы обнаружили, заключается в том, что папки профиля пользователя создаются в папке C: \ Users веб-сервера. Кажется, папка создается, когда новый пользователь, который никогда ранее не входил в систему, входит в систему в первый раз. По мере того, как число новых пользователей, входящих в приложение, увеличивается, дисковое пространство сокращается из-за большого количества создаваемых новых пользовательских папок.

Мне нужно вернуть токен после аутентификации (аутентифицированный \ пароль заблокирован \ неправильный пароль) для его дальнейшего использования и на основе логики, показывающей различные веб-страницы

Кто-нибудь видел такое поведение с методом Win32 LogonUser?

Пожалуйста, ответьте на следующий вопрос:

Можно ли отключить это поведение, чтобы создать папку, занимающую 2,78 МБ места для каждого нового пользователя, и она потребляет мое дисковое пространство?

Я пробовал LOGON32_LOGON_BATCH, но он выдал ошибку 1385 при аутентификации пользователя. Для любого решения, связанного с LOGON32_LOGON_BATCH, не могли бы вы подтвердить, если это прекратит создание папок в расположении C: \ users.

Также для любого возможного решения мне нужно либо

Я могу отключить папку, которая будет создана в C: \ user или Любая другая опция для аутентифицированного пользователя, которая не будет создавать папки.

Ответы [ 3 ]

4 голосов
/ 12 мая 2010

Передайте LOGON32_LOGON_BATCH и предоставьте пользователям разрешение на вход в систему в качестве пакетного задания на этом компьютере с помощью групповой политики.

2 голосов
/ 11 мая 2010

Документация MSDN для LogonUser рекомендует LOGON32_LOGON_BATCH в качестве типа входа для веб-служб:

Этот тип входа предназначен для партии серверы, на которых могут быть процессы выполнение от имени пользователя без их прямое вмешательство. Этот тип также для серверов с более высокой производительностью этот процесс много открытого текста попытки аутентификации за раз, такие как почта или веб-серверы . Функция LogonUser не кешируется учетные данные для этого типа входа.

Вы пробовали это?

1 голос
/ 13 мая 2010

Вы не пишете никакой информации о версии продуктов (.NET, Windows Server, которую вы используете), и от этого может зависеть лучший ответ на ваш вопрос. Более того, наилучший способ решения зависит от того, что вы хотите сделать с маркером пользователя после входа в систему. Вы действительно хотите использовать этот токен или вы хотите только проверить пользователя? Поэтому я постараюсь ответить на наиболее общий вопрос по вашему вопросу.

В общем, ошибка 1385 (ERROR_LOGON_TYPE_NOT_GRANTED) означает следующее (см. http://support.microsoft.com/kb/155012/en):

Пользователь запросил тип входа, такой как интерактивный или сетевой, что не было предоставлено. Администратор имеет контроль над тем, кто может войти в интерактивном режиме и по сети.

Существуют привилегии SE_BATCH_LOGON_NAME и SE_DENY_BATCH_LOGON_NAME (NTSecAPI.h), которые можно отключить / включить в вашем случае (см. Описание http://msdn.microsoft.com/en-us/library/bb545671%28VS.85%29.aspx). Используйте Process Explorer, запущенный с правами администратора (см. http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx), чтобы узнать, какие привилегии имеют процесс, а какие из них включены (см. Вкладку «Безопасность» процесса). Если ваша учетная запись, используемая для пула приложений, не используется Если SE_BATCH_LOGON_NAME предоставлено или эта привилегия не активирована перед вызовом LogonUser, вы должны добавить соответствующий код в вашу программу.

Между прочим, иногда вы не очень хотите делать с учетной записью пользователя и хотите только подтвердить пароль. Для этого вы можете использовать старый способ с SSPI (см. http://support.microsoft.com/kb/180548/en), который используется внутри реализации LogonUser. Этот способ - the most smart and quick way для проверки учетной записи пользователя, которую я знаю.

Вы можете посмотреть "Обходной путь SSPI" (см. http://alt.pluralsight.com/wiki/default.aspx/Keith.GuideBook/HowToGetATokenForAUser.html) для получения дополнительной информации об использовании SSPI в .NET 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...