我遇到的问题是,在使用Azure API Management Service进行客户端证书身份验证时,我无法看到客户端证书被传递到后端。
我创建了一个https后端,我在其中验证证书并放置日志以查看标题和通过的值。
在我的API管理网关中,我在"所有操作"中应用了以下策略。我的api
<policies>
<inbound>
<base/>
<authentication-certificate thumbprint="AB4495609DEEE612E9DF25CBC9EB4D7064D6EA97"/>
</inbound>
<backend>
<forward-request/>
</backend>
<outbound>
<base/>
</outbound>
<on-error>
<base/>
</on-error>
</policies>
&#13;
在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标头
如果我将该标头添加为API网关中的策略并设置cert的base 64编码值,则可以正常工作。我想要使用配置的证书,而不是在标题中设置证书,如果我可以避免它。
我尝试将后端设置为http以及https。两者似乎都给出了相同的结果。
只是一些额外的信息,我的后端是一个运行在docker容器中的aspnet核心web api项目(托管在azure ubuntu机器中)。我已尝试在没有API管理网关的情况下直接访问URL,方法是在标头中传入客户端证书,这也可以毫无问题地工作。