我目前正在创建一个.net C#服务,该服务使用webservice调用将信息从CRM 2011发送到SAP。
凭据如下:
((BasicHttpBinding)defaultBinding).Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
((BasicHttpBinding)defaultBinding).Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; //.Ntlm;
PropertyInfo piClientCreds = type.GetProperty("ClientCredentials");
ClientCredentials creds = (ClientCredentials)piClientCreds.GetValue(obj, null);
PropertyInfo piWindowsCreds = creds.GetType().GetProperty("Windows");
WindowsClientCredential windowsCreds = (WindowsClientCredential)piWindowsCreds.GetValue(creds, null);
PropertyInfo piAllowNtlm = windowsCreds.GetType().GetProperty("AllowNtlm");
piAllowNtlm.SetValue(windowsCreds, true, null);
PropertyInfo piCredentials = windowsCreds.GetType().GetProperty("ClientCredential");
piCredentials.SetValue(windowsCreds, credentials, null);
PropertyInfo piImpersonation = windowsCreds.GetType().GetProperty("AllowedImpersonationLevel");
piImpersonation.SetValue(windowsCreds, System.Security.Principal.TokenImpersonationLevel.Impersonation, null);
我得到的错误是:
{System.ServiceModel.Security.MessageSecurityException:HTTP 请求未经授权使用客户端身份验证方案'Ntlm'。该 从服务器收到的身份验证标头是'基本的 realm =“上传保护区”。 ---> System.Net.WebException:The 远程服务器返回错误:(401)未经授权。在 System.Net.HttpWebRequest.GetResponse()at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度 超时)---内部异常堆栈跟踪结束---
任何帮助解决这个问题,如果可能的话,让它变得动态,我们非常感激。
先谢谢你。
答案 0 :(得分:1)
问题很明显。当客户端尝试使用NTLM进行身份验证时,服务器希望您的客户端使用基本身份验证。尝试使用UserNamePasswordClientCredential进行身份验证。您应该仅通过HTTPS等安全传输方式执行此操作。