我有这个调用Web服务的ASP.Net Web API应用程序。现在(开发环境)Web服务(SOAP)和我的ASP.net应用程序在内部网络中。在生产中,web api应用程序将在公共Internet中,SOAP服务将在内部网络中。
在生产中,我们使用CA SOA Gateway来验证每个服务调用并将请求重定向到内部Web服务。 Gateway应用程序使用HTTPS,内部Web服务使用HTTP。
CA SOA网关需要2因素身份验证,
我已跟随this article在每个服务请求中包含授权HTTP标头。它工作正常。
我使用wcf客户端配置(在web.config中)包含带有请求的客户端证书(< security mode=transport />
)。
我想从物理位置而不是证书存储添加客户端证书。我按照this article附加了文件中的客户端证书,但它并不适用于我,因为我使用.Net 4.6.1
并且我没有使用System.ServiceModel
命名空间来使用DevAge.ServiceModel
代码(来自给定的示例代码)。
问题:
注意:Authorization标头和客户端证书仅用于验证Web服务不需要的SOA网关。
感谢您的帮助。
答案 0 :(得分:0)
关于标题,您还可以实现 IClientMessageInspector 界面,为每个调用添加标头。 像这样:
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
request.Properties.Add(HttpRequestMessageProperty.Name, new HttpRequestMessageProperty { .... });
}
这里有一个类似的问题和好例子:How to add a custom HTTP header to every WCF call?
这是我用过的另一个很好的例子:Authentication using HTTP Authorization Header in WCF SOAP API
有关 IClientMessageInspector 的更多信息:MSDN
关于证书,您可以在实例化客户端端点时从路径添加证书,如下所示:
var endpointIdentity = EndpointIdentity.CreateX509CertificateIdentity(new X509Certificate2(@"c:\cert\mycertificate.pfx", "password"));
var endpoint = new EndpointAddress(new Uri("http://dns/service.svc"), endpointIdentity);
或添加到客户端,如下所示:
var client = new YourService("BasicHttpBinding_IServiceInterface");
client.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"c:\certifcate.pfx", "password", X509KeyStorageFlags.DefaultKeySet);
希望它有所帮助。