代码之家  ›  专栏  ›  技术社区  ›  TWA

无身份验证的安全TCP.NET远程处理通道

  •  1
  • TWA  · 技术社区  · 15 年前

    一切正常,直到我启用加密,然后连接时出现错误“服务器拒绝了客户端凭据”。我已进行了大量搜索,但未能找到适合我的解决方案。

    我的远程处理对象有自己的内置身份验证,因此我不需要Windows来执行任何类型的身份验证。

    波顿线问题是:

    2 回复  |  直到 15 年前
        1
  •  5
  •   Mehrzad Chehraz    10 年前

    首先,使用“secure”属性/参数保护服务器和客户端通道。然后,在客户端将用户名和密码设置为空字符串。

    IDictionary properties = new Hashtable();
    properties["username"] = "";
    properties["password"] = ""; 
    // Set other properties here
    IClientChannelSinkProvider provider = new BinaryClientFormatterSinkProvider();
    channel = new TcpClientChannel(properties, provider);
    ChannelServices.RegisterChannel(channel, true);
    

    在这种情况下,客户端以匿名用户(NT AUTHORITY\anonymous LOGON)的身份连接到服务器,并且就我所监视的客户端和服务器之间的通信而言,它是加密的。

        2
  •  0
  •   TWA    15 年前

    经过相当多的研究,我得出结论,如果没有使用.NET远程处理的一些主要自定义编码,这是不可能做到的。

    我决定将项目转移到WCF,WCF允许在任何类型的身份验证之外使用SSL。搬到WCF后,一切都像一个魔咒。

        3
  •  0
  •   Dharman Aman Gojariya    4 年前

    我敢肯定大多数人都转向了WCF,但我想提出一个对我有效的解决方案,并希望能对那些在.net远程处理方面苦苦挣扎的人有效。要求能够通过当前的.net远程处理实现与另一个在不同域中运行的windows服务进行通信。我知道我必须使用模仿。我尝试了迈赫扎德的解决方案,但没有成功。似乎连接没有使用我设置的凭据。然后我发现 this article 这就解决了我的问题。我可以将凭证进一步设置。

    IMyRemoteObject myObj = (IMyRemoteObject )
                    Activator.GetObject(
                    typeof(IMyRemoteObject ),
                    CreateConnectionString());
    
    IDictionary props =  ChannelServices.GetChannelSinkProperties(myObj );
    props["username"] = "Administrator";
    props["password"] = "xyz";
    props["domain"] = "TestDomain";
    
    //call the remote object
    MessageBox.Show(myobj.hello());