【发布时间】:2017-05-21 10:19:15
【问题描述】:
场景:用户与 angularjs 客户端称为“网关”的 WebApi 对话。 'Gateway' 就像一个门面或代理,所以从 User 到 'Gateway' 的所有请求都将被转发到另一个 WebApis。
安全细节:“网关”WebApi 和所有其他 WebApi 都放置在具有 HTTPS 绑定的 IIS 中,并且 SSL 客户端证书选项为“接受”。因此,用户将向 IIS 提供有效的客户端证书,经过验证后,请求将由 WebApi 处理。
问题:当“网关”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,客户端证书将按预期显示。如果我尝试通过“网关”,客户端证书也会出现在“网关”请求中,但是在成功附加并发送请求后,另一个 WebApi 不会收到任何附加的证书。
有什么想法吗? 谢谢。
【问题讨论】:
-
“另一个WebApi”是否需要在“网关”获取最终用户(用于识别)的证书?还是可以简单地在“网关”上对用户进行身份验证,而网关使用服务帐户将“网关”身份验证到“另一个 WebApi”?
-
基本上,我有单独的 web api 端点,负责处理客户端证书。最好让网关 web api 只处理转发请求而不处理其他任何事情。谢谢
-
好的。这很重要,因为您的问题有两个完全不同的答案,这取决于您是否需要将身份验证传递给下一个服务器。
标签: c# ssl asp.net-web-api