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

Authentication Azure APIM:将客户端证书发送到后端进行身份验证,authentication,azure-api-management,client-certificates,Authentication,Azure Api Management,Client Certificates,我们有一个APIM,它根据不同的策略将请求转发到不同的后端服务器。我想限制对后端服务器的请求仅来自该APIM(而不是其他实体)。目前有两种选择: 在后端服务器上进行IP过滤,仅当请求来自APIM IP地址时才接受请求-不想走这条路,因为APIM IP地址可能会更改,并且保持列表更新很麻烦 客户端证书身份验证机制—APIM将发送一个证书,然后由后端服务器进行验证 我不明白的是APIM是如何发送证书的?证书是在HTTP头中发送的,还是在HTTP下面的TLS层中发送的 问这个问题是因为:我正在寻找一种

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

  • 在后端服务器上进行IP过滤,仅当请求来自APIM IP地址时才接受请求-不想走这条路,因为APIM IP地址可能会更改,并且保持列表更新很麻烦
  • 客户端证书身份验证机制—APIM将发送一个证书,然后由后端服务器进行验证
  • 我不明白的是APIM是如何发送证书的?证书是在HTTP头中发送的,还是在HTTP下面的TLS层中发送的

    问这个问题是因为:我正在寻找一种方法来不强制后端服务器执行APIM证书认证;i、 e.APIM应该发送证书,但不同的后端服务器如何处理证书则取决于他们(他们可以选择验证客户端证书,或者只允许请求而不进行验证)。为了实现这一点,我的理解是,最好将来自APIM的客户端证书作为自定义头的一部分发送。如果APIM中的策略在TLS层发送证书,那么证书不必到达后端服务器的应用程序逻辑。例如,在后端是Azure app web服务的情况下,TLS终止发生在前端负载平衡器上,该负载平衡器随后将证书转发给自定义头中的应用程序代码。由于我处理的是不同类型的后端服务器(不仅仅是Azure应用程序服务),因此在自定义头中发送证书(无论后端服务器类型如何,都会在同一头中发送到应用程序代码)更有意义


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

    我不知道这个答案是否对您有帮助。几个月前我做了一些调查。据我所知,入站和出站客户端证书都是在TLS级别上处理的,只有Azure中的一些原语(例如前门、应用程序网关或应用程序服务)可以将客户端证书从TLS级别调到HTTP头中,由后端处理。由于此解决方案对我的案例来说不够通用,而且一个第三方后端受到限制,因此我设计了服务器到服务器的证书。

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