Azure APIM:将客户端证书发送到后端进行身份验证

时间:2021-04-28 18:15:14

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

我们有一个 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 应用服务),因此在自定义标头中发送证书(无论后端服务器类型如何,都可以在同一标头中进行应用编码)更有意义.

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

1 个答案:

答案 0 :(得分:1)

不知道这个回答对你有没有帮助。几个月前我做了一些调查。据我了解,入站和出站客户端证书是在 TLS 级别处理的,并且只有 Azure 中的一些原语,例如Front Door应用程序网关应用服务可以将客户端证书从 TLS 级别带入 HTTP 标头以供后端处理。由于此解决方案对于我的案例不够通用,而且一个 3rd 方后端无论如何都是有限的,因此我设计了服务器到服务器证书。