场景:用户通过AngularJS客户端与名为“Gateway”的WebApi交互。'Gateway'类似于门面或代理,因此从用户到'Gateway'的所有请求都将转发到另一个WebApi。
安全细节:'Gateway' WebApi和所有其他WebApi都放置在IIS中,具有HTTPS绑定,并且SSL客户端证书选项为“接受”。因此,用户将向IIS提供有效的客户端证书,并在验证后,请求将由WebApi处理。
问题:当“Gateway” WebApi接收到请求时,客户端证书显示在请求对象中。然后,我使用HttpClient将此请求转发到另一个WebApi。但是当另一个WebApi端点收到请求时,不再附加任何客户端证书。
以下是请求转发的代码片段:
var request = Request; // income request from angularjs
var handler = new WebRequestHandler();
handler.ClientCertificates.Add(request.GetClientCertificate()); // setting up client certificate from user's request
using (var httpClient = new HttpClient(handler))
{
request.RequestUri = *chaning request address here*;
var response = await httpClient.SendAsync(request);
return ResponseMessage(response);
}
注意:如果我直接尝试访问另一个WebApi,则客户端证书会如预期一样出现。 如果我通过“Gateway”尝试访问,则在“Gateway”请求中也会呈现客户端证书,但成功附加并发送请求后,另一个WebApi不会收到任何附加的证书。
有什么想法吗? 谢谢。