我们有一个APIM,它根据不同的策略将请求转发到不同的后端服务器。我想限制对后端服务器的请求只能来自该APIM(而不是其他实体(。手头的两个选项是:
- 后端服务器上的IP过滤,仅当请求来自APIM IP地址时才接受请求-不想走这条路,因为APIM的IP地址可能会更改,而且保持列表更新很麻烦
- 客户端证书身份验证机制APIM将发送一个证书,然后由后端服务器进行验证
我一直不明白APIM是如何发送证书的?证书是在HTTP标头中发送的,还是在HTTP下面的TLS层中发送的?
问这个问题是因为:我正在寻找一种不强制后端服务器进行APIM证书身份验证的方法;即APIM应该发送证书,但不同的后端服务器如何处理证书取决于他们(他们可以选择验证客户端证书,也可以只允许请求而不进行验证(。为了实现这一点,我的理解是,最好将APIM的客户端证书作为自定义头的一部分发送。如果APIM中的身份验证证书策略在TLS层中发送证书,则证书将不必到达后端服务器的应用程序逻辑。例如,在后端是Azure应用程序web服务的情况下,TLS终止发生在前端负载平衡器上,然后前端负载平衡器将证书转发到自定义标头X-ARR-ClientCert中的应用程序代码。由于我处理的是不同类型的后端服务器(不仅仅是Azure App Service(,因此在自定义标头中发送证书(无论后端服务器类型如何,它都会进入同一标头中的应用程序代码(更有意义。
对这种方法有什么想法吗?如果我对APIM中的客户端证书如何工作的理解是错误的?
我不知道这个答案是否对你有帮助。几个月前我做了一些调查。据我所知,入站和出站客户端证书是在TLS级别上处理的,只有Azure中的一些基元,例如Front Door、Application Gateway或App Service,才能将客户端证书从TLS级别带入HTTP标头,由后端处理。由于此解决方案对我的情况来说不够通用,而且第三方后端无论如何都是有限的,所以我设计了服务器到服务器证书。