Web services 调用使用Windows凭据保护的ASMX服务

Web services 调用使用Windows凭据保护的ASMX服务,web-services,asp.net-mvc-4,windows-authentication,Web Services,Asp.net Mvc 4,Windows Authentication,我得到了一个Web服务(ASMX)来使用我需要使用的Windows凭据 因此,我已经设置了客户端VPN并调用了WSDL,保存为XML文件,并使用svcuti.exe生成了代理类,到目前为止,一切正常 我打电话给服务部 //Web服务 client=new CmListSync.Models.WebCorePlayersSoapClient(); client.ClientCredentials.Windows.AllowedImpersonationLevel=System.Security.P

我得到了一个Web服务(ASMX)来使用我需要使用的Windows凭据

因此,我已经设置了客户端VPN并调用了WSDL,保存为XML文件,并使用
svcuti.exe
生成了代理类,到目前为止,一切正常

我打电话给服务部

//Web服务
client=new CmListSync.Models.WebCorePlayersSoapClient();
client.ClientCredentials.Windows.AllowedImpersonationLevel=System.Security.Principal.TokenImpersonationLevel.Impersonation;
client.ClientCredentials.Windows.ClientCredential=新系统.Net.NetworkCredential(cUser、CPAS、cDoma);
web.config
中,我有以下设置:


但当我尝试呼叫该服务时,我收到一个异常消息,说:

HTTP请求未经客户端身份验证方案“匿名”授权。从服务器接收的身份验证标头为“基本领域=\“vm-wssrv01\”

我遗漏了什么?由于我提供了windows凭据,服务不应该正常进行身份验证吗我还应该做什么?

我所尝试的:

  • 将安全模式设置为
    消息
    ,我得到了与上述问题相同的错误
  • 将安全模式设置为
    TransportWithMessageCredential
    我得到了: 提供的URI方案“http”无效;应为“https”。\r\n参数 姓名:via
  • 将安全模式设置为
    传输,我得到:绑定验证失败,因为WSHttpBinding不支持传输安全(HTTPS)上的可靠会话。无法打开通道工厂或服务主机。使用消息安全性通过HTTP进行安全可靠的消息传递

评论如下:

我已切换到
basicHttpBinding


并尝试将
安全模式更改为:

  • TransportWithMessageCredential
    {“提供的URI方案“http”无效;应为“https”。\r\n参数名称:via”}

  • TransportCredentialOnly
    {“HTTP请求未经客户端身份验证方案“协商”授权。从服务器收到的身份验证标头为“基本领域=\“vm-wssrv01\”。”}

  • 消息
    {“BasicHttp绑定要求BasicHttpBinding.Security.Message.ClientCredentialType等同于安全消息的BasicHttpMessageCredentialType.Certificate凭据类型。为用户名凭据选择Transport或TransportWithMessageCredential Security。”}

  • 运输
    {“提供的URI方案“http”无效;应为“https”。\r\n参数名称:via”}

  • None
    {“HTTP请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头为“基本领域=\“vm-wssrv01\”。”}

我的想法快用完了:(
该服务仅限于HTTP,而非HTTPS,我没有证书可供使用……

三天后,在约翰·桑德斯的大力帮助下,他说ASMX服务唯一可能的绑定是
BasichtpBinding
(我对答案的搜索开始更加集中),我进入了这一阶段:

在服务调用方中,必须将
客户端.ClientCredentials.UserName
用作:

//Web服务
client=new CmListSync.Models.WebCorePlayersSoapClient();
client.ClientCredentials.UserName.UserName=cUser;
client.ClientCredentials.UserName.Password=cPass;
在配置部分,需要使用:



ASMX web服务不支持任何WS-*标准。您必须在ASMX服务中使用
basicHttpBinding
。@johnsa很高兴知道,我已经更新了这个问题。虽然做了更改,但我仍然无法正确地进行身份验证:/非常感谢您发布此消息。您刚刚为我节省了三天的时间。当我添加将Web引用添加到Visual Studio,它生成了两个不同的绑定,但它没有生成基本的绑定,因为它是一个ASMX引用。在浏览了大量帖子和谷歌搜索后,这才有所帮助!我希望这样可以让您尽可能多地投票选出几个问题和答案。这就是这是一篇博文!删除了
部分,因为在我们的案例中它不是必需的。