【问题标题】:Calling web api with client certificate from another web api使用来自另一个 web api 的客户端证书调用 web api
【发布时间】: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


【解决方案1】:

在您的网关服务器上,您需要将身份验证密钥导入“机器”证书存储(MMC.exe,添加管理单元“证书”,计算机帐户“,证书-个人-证书,导入)。
向您的 IIS 池正在使用的帐户授予权限(用于身份验证证书)。 (右键单击证书,所有任务,管理私钥。添加,高级,位置=[机器名称],立即查找,(可能)网络服务,读取)。

在您的 web.config 中(在您的网关服务器上),检查您的 system.serviceModel / behaviors / endpointBehaviors / behavior / clientCredentials / clientCertificate。确保属性:storeLoction="LocalMachine",以使用机器密钥存储中的证书。

【讨论】:

  • 会有很多客户端,有很多不同的客户端证书,每个证书都包含用户身份详细信息。因此,为了澄清,如果不将这些所有可能的传入证书存储在网关 mmc 存储中,就不可能将带有附加客户端证书的请求从网关转发到另一个 Web api?
  • 这就是我之前提出问题的原因。可以将客户端凭据传递给 API 服务器,但这是完全不同的答案和配置。
  • tgolisch,您能否描述一下可能的解决方案,因为我还没有成功?
  • 我还没有为其他解决方案制作演示,但我相当肯定它涉及两个服务器之间的 Kerberos 信任,以及网关服务器上的模拟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2014-11-23
相关资源
最近更新 更多