Как мне пройти аутентификацию локального пользователя Windows на другом компьютере в приложении ASP.NET?

В моем приложении ASP.NET мне нужно иметь возможность аутентифицировать/авторизовать локальных пользователей/групп Windows (т. е. не Active Directory) на другом компьютере, а также иметь возможность изменять пароли указанных удаленных локальных учетных записей Windows.

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

Я пробовал использовать DirectoryEntry и WinNT так:

DirectoryEntry user = new DirectoryEntry(String.Format("WinNT://{0}/{1},User",
           serverName, username), username, password, AuthenticationTypes.Secure)

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

Множественные подключения к серверу или общему ресурсу одним и тем же пользователем с использованием более одного имени пользователя не допускаются. Отключите все предыдущие подключения к серверу или общему ресурсу и повторите попытку.

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

Есть ли лучший способ аутентификации по локальным учетным записям Windows на удаленном компьютере, авторизации по их группам и изменению их паролей?

Заранее благодарны за Вашу помощь.


person Daniel Chambers    schedule 24.05.2010    source источник


Ответы (1)


На мой взгляд, вы не можете сделать это из своего сценария ASP.Net. Потому что с сервера вам нужно знать, что все клиентские машины будут обращаться к вашей странице, и предоставить серверу достаточные права для доступа к клиенту, чтобы выполнить эту дополнительную аутентификацию пользователя и смену пароля. Также это громоздко. Одним из решений является использование элемента управления ActiveX и запись этой логики (аутентификация пользователя и изменение пароля) в этом элементе управления ActiveX и предоставление элементу управления ActiveX достаточных прав в клиентах. Это немного некрасиво, но это единственное возможное решение без ADS.

person ferosekhanj    schedule 16.07.2010