调用远程Web服务 - “请求失败,HTTP状态401:未授权”
问题描述:
我正在调用远程服务并使用证书进行身份验证。使用控制台应用进行测试时,一切正常。从ASP.NET网站(.NET 4.0,IIS7)调用时,我收到401的响应代码 - 未经授权。调用远程Web服务 - “请求失败,HTTP状态401:未授权”
我使用的代码,如添加证书:
var client = new TheGeneratedProxy();
client.ClientCertificates.Add(new X509Certificate("D:\cert.pfx", "myPassword"));
(注:我也装的.pfx到使用IE的本地证书库中被加载到我的“个人”存储 - - 所以我怀疑这是问题,因为该网站将运行在不同的帐户下。)
答
我认为问题在于您的IIS用户(网络服务/ ASPNET)无权访问证书。为了给予网络服务访问证书在商店,下载以下工具:winhttpcertcfg(http://www.microsoft.com/downloads/details.aspx?familyid=c42e27ac-3409-40e9-8667-c748e422833f&displaylang=en)
现在,打开命令提示符,然后输入:
winhttpcertcfg –g –c LOCAL_MACHINE\My –s ORGNAME –a "Network Service"
请注意,“网络服务”可被任何其他账户取代。即如果您为应用程序池配置了自定义用户,则应该将此用户作为-a参数的值。
ORGNAME应该用您在创建证书期间指定的组织名称替换。