我正面临一个问题,在使用Azure API管理服务使用客户端证书身份验证时,我无法看到客户端证书被传递到后端。
我已经创建了一个https后端,我在其中验证证书并记录日志,以查看标头和通过的值。
在我的API管理网关中,我在api的“所有操作”中应用了以下策略
<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头部缺失
如果我将标头作为策略添加到API网关中,并将证书设置为base64编码值,则可以正常工作。如果可以避免,我希望使用配置的证书,而不是在头部设置证书。
我已经尝试将后端设置为http和https。两者似乎给出了相同的结果。
只是一些额外的信息,我的后端是一个在docker容器(托管在azure ubuntu机器上)中运行的aspnet核心web api项目。我尝试过在没有API管理网关的情况下,通过在报头中传入客户端证书来直接访问URL,同样也没有任何问题。
发布于 2017-08-12 22:50:53
SSL头是在使用Microsoft ARR进行-ARR-ClientCert卸载时创建的。当API Management (APIM)使用客户端证书对后端服务器进行身份验证时,它将在TLS层提供客户端证书来执行此操作。这意味着对后端的调用需要使用HTTPS。APIM不会发送ARR报头,因为这根本不会提供安全性。任何人都可以伪造标题。
我不确定你的后端是不是在抱怨在直接提供证书时没有得到ARR头。通常,对于ASP.NET Web API安全管道来说,其中的一个就足够了。
https://stackoverflow.com/questions/45643413
复制相似问题