调用远程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应该用您在创建证书期间指定的组织名称替换。