2010-03-08 1 views
1

В нашем клиентском/серверном приложении пользователь может войти в систему, используя имя пользователя/пароль. Затем сервер аутентифицирует пользователя из своей локальной базы данных пользователя или из активного каталога, если пользователь не найден в локальной базе данных.Как аутентифицировать пользователя с Active Directory у клиента с помощью встроенной системы безопасности Windows?

Для этого сценария все в порядке. Но мы хотим реализовать режим «Интегрированная безопасность» на клиенте для использования учетных данных текущего пользователя Windows.

Решение может заключаться в том, чтобы захватить WindowsIdentity.GetCurrent(), отправить его на сервер и убедиться, что пользователь существует в активном каталоге с идентификатором пользователя SID из WindowsIdentity.

Однако это небезопасно, поскольку пользовательские идентификаторы SID не являются частными, поэтому взломанный клиент может отправить эту информацию на сервер, не зная пароля пользователя.

Что такое безопасный способ в .Net иметь интегрированный режим безопасности в приложении Client/Server?

+0

У кого есть Сервер? Являются ли клиент и сервер размещены в одном домене или внутри доменов, которые доверяют друг другу? – Jeff

+0

@JD: сервер размещен в службе Windows, а клиент и сервер находятся в одном домене. Связь между клиентом и сервером выполняется с помощью настраиваемого сокета tcp (No remoting или WCF). –

ответ

1

Решение должно использовать NegotiateStream. Это установит безопасную и аутентифицированную связь с сервером. Клиент может аутентифицироваться со встроенной безопасностью, предоставляя CredentialCache.DefaultNetworkCredentials для NegotiateStream, сервер может действовать на аутентифицированного пользователя с помощью NegotiateStream.RemoteIdentity.

Смежные вопросы