WCF使用者不将客户端凭据附加到标头

时间:2014-06-07 16:56:59

标签: c# wcf authentication

我有一个使用用户名身份验证的WCF服务,我有一个使用该服务并尝试访问受保护方法的控制台应用程序。我运行代码,Fiddler在auth选项卡中说:

  

没有代理授权标头。

     

没有授权标题。

这是我的访问代码:

BasicHttpBinding binding = new BasicHttpBinding();

binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;
binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default;
binding.Security.Transport.Realm = "MyRealm";         

ServiceReference1.MobileAPIClient serviceProxy = new ServiceReference1.MobileAPIClient(binding, new EndpointAddress("https://xx.xx.xx.xx/InventoryServices.MobileApi.svc"));

serviceProxy.ClientCredentials.UserName.UserName = "test";
serviceProxy.ClientCredentials.UserName.Password = "test123";

serviceProxy.ChannelFactory.Credentials.UserName.UserName = "test";
serviceProxy.ChannelFactory.Credentials.UserName.Password = "test123";

try 
{
    serviceProxy.Test();
}
catch (Exception ex) 
{
    var ex2 = ex;
}

为什么凭证没有附加到标题?

1 个答案:

答案 0 :(得分:0)

wcf中有握手模式。因此,客户端和服务在第一次请求之前与凭证交换,然后他们仅使用会话令牌。 要禁用此模式,您应该在web.config中设置

<security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="false"/>
</security>