【发布时间】:2021-04-28 18:15:14
【问题描述】:
我们有一个 APIM,它根据不同的策略将请求转发到不同的后端服务器。我想限制对后端服务器的请求仅来自该 APIM(而不是其他实体)。手头有两个选择:
- 后端服务器的 IP 过滤仅在请求来自 APIM IP 地址时才接受请求 - 不要走这条路,因为 APIM IP 地址可能会更改,而且更新列表很麻烦。
- 一种客户端证书身份验证机制 - 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