Azure API 管理服务不会将 header 中的客户端证书传递到后端
Azure API Management Service doesn't pass the client certificate in the header to the backend
我遇到一个问题,在使用 Azure API 管理服务进行客户端证书身份验证时,我无法看到传递到后端的客户端证书。
我创建了一个 https 后端,我在其中验证证书并记录日志以查看 headers 和通过的值。
在我的 API 管理网关中,我在 api
的 "All Operations" 中应用了以下策略
<policies>
<inbound>
<base/>
<authentication-certificate thumbprint="AB4495609DEEE612E9DF25CBC9EB4D7064D6EA97"/>
</inbound>
<backend>
<forward-request/>
</backend>
<outbound>
<base/>
</outbound>
<on-error>
<base/>
</on-error>
</policies>
在 API 调用中,我有以下策略定义
<policies>
<inbound>
<base/>
</inbound>
<backend>
<base/>
</backend>
<outbound>
<base/>
</outbound>
现在,当我调用 API 时,我可以从后端看到收到以下消息
8/12/2017 6:24:57 AMOcp-Apim-Subscription-Key:dbxxxx991a3b4b8aa19a4fxxxxxxx
8/12/2017 6:24:57 AMX-ARR-ClientCert header 丢失
如果我将 header 作为策略添加到 API 网关中并设置证书的 base 64 编码值,它可以正常工作。如果可以避免的话,我想使用配置的证书而不是在 header 中设置证书。
我试过将后端设置为 http 和 https。两者似乎给出相同的结果。
只是一些额外的信息,我的后端是 docker 容器中的 aspnet 核心 Web api 项目 运行(托管在 azure ubuntu 机器中)。我尝试通过在 header 中传递客户端证书直接点击 URL 而没有 API 管理网关,并且也没有任何问题。
-ARR-ClientCert
header 是在 Microsoft ARR 用于 SSL 卸载时创建的。当 API 管理 (APIM) 使用客户端证书对后端服务器进行身份验证时,它将在 TLS 层提供客户端证书来执行此操作。这意味着对后端的调用需要使用 HTTPS。 APIM 不发送 ARR header,因为那样根本无法提供任何安全保障。任何人都可以伪造 header.
我不确定您的后端是否抱怨直接提供证书时没有获得 ARR Header。对于 ASP.NET Web API 安全管道,通常一个或另一个就足够了。
我遇到一个问题,在使用 Azure API 管理服务进行客户端证书身份验证时,我无法看到传递到后端的客户端证书。
我创建了一个 https 后端,我在其中验证证书并记录日志以查看 headers 和通过的值。
在我的 API 管理网关中,我在 api
的 "All Operations" 中应用了以下策略<policies>
<inbound>
<base/>
<authentication-certificate thumbprint="AB4495609DEEE612E9DF25CBC9EB4D7064D6EA97"/>
</inbound>
<backend>
<forward-request/>
</backend>
<outbound>
<base/>
</outbound>
<on-error>
<base/>
</on-error>
</policies>
在 API 调用中,我有以下策略定义
<policies>
<inbound>
<base/>
</inbound>
<backend>
<base/>
</backend>
<outbound>
<base/>
</outbound>
现在,当我调用 API 时,我可以从后端看到收到以下消息
8/12/2017 6:24:57 AMOcp-Apim-Subscription-Key:dbxxxx991a3b4b8aa19a4fxxxxxxx 8/12/2017 6:24:57 AMX-ARR-ClientCert header 丢失
如果我将 header 作为策略添加到 API 网关中并设置证书的 base 64 编码值,它可以正常工作。如果可以避免的话,我想使用配置的证书而不是在 header 中设置证书。
我试过将后端设置为 http 和 https。两者似乎给出相同的结果。
只是一些额外的信息,我的后端是 docker 容器中的 aspnet 核心 Web api 项目 运行(托管在 azure ubuntu 机器中)。我尝试通过在 header 中传递客户端证书直接点击 URL 而没有 API 管理网关,并且也没有任何问题。
-ARR-ClientCert
header 是在 Microsoft ARR 用于 SSL 卸载时创建的。当 API 管理 (APIM) 使用客户端证书对后端服务器进行身份验证时,它将在 TLS 层提供客户端证书来执行此操作。这意味着对后端的调用需要使用 HTTPS。 APIM 不发送 ARR header,因为那样根本无法提供任何安全保障。任何人都可以伪造 header.
我不确定您的后端是否抱怨直接提供证书时没有获得 ARR Header。对于 ASP.NET Web API 安全管道,通常一个或另一个就足够了。