【发布时间】:2020-08-20 19:46:20
【问题描述】:
NegotiateStream 类的 MSDN documentation 表示:
使用 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
但它根本不等同于冒充。之后,程序将无法访问只有经过身份验证的远程用户才能访问的文件。
那么我们打算如何使用从 NegotiateStream 获得的 Iidentity(或由此构建的 WindowsPrincipal)来实际进行模拟?
注意:这需要通过桌面应用程序或 Windows 服务完成,而不是 ASP.NET 应用程序或 WCF 服务。
【问题讨论】:
标签: c# vb.net impersonation