我想通过HTTP调用将Kerberos令牌传递给使用WCF的服务器。
我有一段成功执行此操作的代码。但它只有在我向HTTPS URI发出请求时才有效。
var httpBinding = new WebHttpBinding(WebHttpSecurityMode.Transport) { MaxReceivedMessageSize = Int32.MaxValue };
httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
httpBinding.Security.Transport.Realm = "MyCompany.com";
var endPoint = new EndpointAddress("https:xxxxxxxx.com/my/service); // This works
var endPoint = new EndpointAddress("http:xxxxxxxx.com/my/service); // This does not work
var channelFactory = new ChannelFactory<IMyServiceContract>(httpBinding, endPoint);
channelFactory.Endpoint.Behaviors.Add(new WebHttpBehavior());
_channel = channelFactory.CreateChannel();
_channel.ConsumeService();
如果我通过频道发出请求,并且终点是https。它可以工作,我可以验证Kerberos令牌是否在HTTP请求中。
如果服务端点是HTTP,则会出错:
System.ArgumentException : The provided URI scheme 'http' is invalid; expected 'https'.
Parameter name: via
有人可以让我知道如何配置WCF,以便它使用HTTP URI发送Kerboros令牌。
此致 凯文
答案 0 :(得分:0)
如果您不想使用HTTPS,则必须将安全模式设置为WebHttpSecurityMode.TransportCredentialOnly
。如果您使用WebHttpSecurityMode.Transport
,则需要使用HTTPS。