使用/ netTcpBinding在WCF中模拟客户端标识

时间:2009-06-10 14:19:27

标签: wcf wcf-binding wcf-security

通过配置调用netTcp端点操作时,是否可以模拟客户端的身份? WCF配置客户端中有一个部分,如下所示:

<client>
    <endpoint 
        address="net.tcp://localhost:8081/tcpExample" 
        binding="netTcpBinding"
        bindingConfiguration="myTcpBinding" 
        contract="TestTcp.IHelloTcp"
        name="NetTcpBinding_IHelloTcp">
        <identity>
            <userPrincipalName value="leethax@mydomain.inc" />
        </identity>
    </endpoint>
</client>

我的客户端没有失败,似乎附加到客户端的身份是当前登录的用户,即我。

2 个答案:

答案 0 :(得分:3)

你真的有三个选择:

  1. 手动模仿 (WindowsIdentity.Impersonate)
  2. 声明模仿 (OperationBehavior(Impersonation = Impersonation.Required))
  3. 完全假扮 (ServiceAuthorizationBehavior.ImpersonateCallerForAllOperations)
  4. 此外,请确保您运行服务的帐户(即leethax@mydomain.inc)在计算机和域级别都获得了适当的权限。

答案 1 :(得分:1)

HMm ......不确定我是否跟进。 netTcpBinding的默认行为是使用Windows凭据 - 例如您当前的Windows帐户用于服务凭据。

这是开箱即用的默认设置。

如果您想冒充某些其他用户,不能,您无法在配置中执行此操作 - 您必须在代码中执行此操作。这是唯一的方法,对不起。

MyServiceClient client = new MyServiceClient();
client.ClientCredentials.Windows.ClientCredential.Domain = domain;
client.ClientCredentials.Windows.ClientCredential.UserName = username;
client.ClientCredentials.Windows.ClientCredential.Password = password;

在config中指定其他用户的唯一方法是使用定义要使用的另一个用户帐户的证书。您无法在配置文件中配置直接Windows用户帐户及其密码。