【问题标题】:Impersonation with Net.Security.NegotiateStream使用 Net.Security.NegotiateStream 进行模拟
【发布时间】: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


    【解决方案1】:

    刚刚意识到我们可以将从流中获得的IIdentity 转换为WindowsIdentity,然后使用它来进行模拟,如下所示:

                Using AuthStream As New NegotiateStream(Client.GetStream, False)
                    AuthStream.AuthenticateAsServer(CredentialCache.DefaultCredentials, ProtectionLevel.EncryptAndSign, TokenImpersonationLevel.Impersonation)
                    Dim ClientIdentity As WindowsIdentity = DirectCast(AuthStream.RemoteIdentity, WindowsIdentity)
                    Using ClientContext As WindowsImpersonationContext = ClientIdentity.Impersonate
                        'Do stuff as the remote user here'
                    End Using
                End Using
    

    一旦我实现了客户端并在测试域上运行它,就需要对此进行测试,但我认为它应该可以工作。

    编辑:经过测试,一切正常

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多