【问题标题】:Azure APIM: sending client certificate to backend for authenticationAzure APIM:将客户端证书发送到后端进行身份验证
【发布时间】:2021-04-28 18:15:14
【问题描述】:

我们有一个 APIM,它根据不同的策略将请求转发到不同的后端服务器。我想限制对后端服务器的请求仅来自该 APIM(而不是其他实体)。手头有两个选择:

  1. 后端服务器的 IP 过滤仅在请求来自 APIM IP 地址时才接受请求 - 不要走这条路,因为 APIM IP 地址可能会更改,而且更新列表很麻烦。
  2. 一种客户端证书身份验证机制 - APIM 将发送一个证书,然后后端服务器可以对其进行验证。

我一直无法理解的是 APIM 是如何发送证书的?证书是在 HTTP 头中发送的,还是在 HTTP 下面的 TLS 层中发送的证书?

问这个是因为:我正在寻找一种不强制后端服务器进行 APIM 证书身份验证的方法;即 APIM 应该发送证书,但不同的后端服务器如何处理它,取决于他们(他们可以选择验证客户端证书或只允许请求而不进行验证)。为此,我的理解是最好从 APIM 发送客户端证书作为自定义标头的一部分。如果 APIM 中的authentication-certificate 策略在 TLS 层中发送证书,则证书没有必要到达后端服务器的应用程序逻辑。例如,在后端是 Azure 应用程序 Web 服务的情况下,TLS 终止发生在前端负载均衡器上,然后将证书转发到自定义标头 X-ARR-ClientCert 中的应用程序代码。由于我正在处理不同类型的后端服务器(不仅是 Azure App Service),因此在自定义标头中发送证书(无论后端服务器类型如何,都可以在同一标头中进行应用程序代码)更有意义.

对这种方法有什么想法吗?如果我对 APIM 中的客户端证书如何工作的理解有误?

【问题讨论】:

  • 请允许我在这里添加我的想法。使用 apim 时,后端服务器的 url 是隐藏的,外部用户或设备不知道到您的服务器的路由。如果您的服务器 url 暴露,您需要设置策略禁止除来自 apim 的请求之外的其他请求,您只能让您的服务器知道传入的请求来自 apim,例如请求包含特定的请求标头,我们可以添加请求旁边的订阅密钥转到后端服务。正如您所说,后端服务器可能会选择验证证书,那么为什么不使用请求头或其他一些呢?

标签: authentication azure-api-management client-certificates


【解决方案1】:

我不知道这个答案是否对你有帮助。几个月前我做了一些调查。据我了解,入站和出站 客户端证书 在 TLS 级别上处理,Azure 中只有一些原语,例如Front DoorApplication GatewayApp Service 可以将客户端证书从 TLS 级别调入 HTTP 标头以供后端处理。由于这个解决方案对于我的情况不够通用,而且一个第 3 方后端仍然受到限制,所以我设计了 server-to-server 证书。

【讨论】:

    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2013-01-26
    • 2015-10-29
    • 2018-07-05
    • 2019-01-14
    相关资源
    最近更新 更多