Документация MSDN для класса NegotiateStream
говорит:
Используя NegotiateStream, вы можете сделать следующее.
- Отправьте учетные данные клиента на сервер для олицетворения или делегирования .
- Запросить аутентификацию сервера.
- Зашифровать и / или подписать данные перед их передачей.
Первый момент - это то, что я хочу сделать - выдать себя за учетную запись удаленного клиента, но на сервере.
Но я не могу понять, как это сделать, и не могу найти никаких примеров которые фактически используют олицетворение. Все примеры просто устанавливают флаг, чтобы сказать, что они хотят олицетворять себя, но затем все, что они фактически используют, это идентификация, то есть они просто проверяют имя пользователя аутентифицированного пользователя или членство в группе - они фактически не действуют как удаленный пользователь (олицетворение)
Итак, вот мой код:
Dim Client As TcpClient = Listener.AcceptTcpClient
Using AuthStream As New NegotiateStream(Client.GetStream, False)
AuthStream.AuthenticateAsServer(Net.CredentialCache.DefaultCredentials, ProtectionLevel.EncryptAndSign, TokenImpersonationLevel.Impersonation)
Dim ClientUser As New WindowsPrincipal(AuthStream.RemoteIdentity)
'Now what?
End Using
Некоторые примеры, кажется, думают, что это то же самое, что и олицетворение:
Dim ClientUser As New WindowsPrincipal(AuthStream.RemoteIdentity)
Threading.Thread.CurrentPrincipal = ClientUser
Но это совсем не то же самое, что олицетворение . После этого программа не сможет получить доступ к файлам, к которым, например, может получить доступ только аутентифицированный удаленный пользователь.
Итак, как мы собираемся использовать Iidentity (или WindowsPrincipal, построенный на его основе) из NegotiateStream, чтобы фактически выполнить олицетворение?
ПРИМЕЧАНИЕ. Это необходимо сделать из настольного приложения или службы windows, не , приложения ASP. NET или службы WCF .