【发布时间】:2020-04-11 00:17:24
【问题描述】:
在 Azure API 管理中,我试图能够验证来自调用应用程序的传入证书以及将证书发送到后端。我也在尝试使用 Azure Keyvault Certs 来执行此操作。我能够独立完成其中任何一项工作,但无法让他们一起工作。
基本上我想从 Keyvault 获取证书,确保传入的证书匹配,然后还将相同的证书发送到后端以进行端到端证书验证。通过使用下面的入站策略,我可以从 keyvault 获取证书并使用它发送到我的后端。我还能够获得传入证书的缩略图。
我遇到的问题是从我从 keyvault 获得的证书的 base64 字符串中获取指纹。我无论如何都可以将证书字符串转换为证书对象?
<inbound>
<base />
<send-request mode="new" response-variable-name="keyVaultCertResponse" timeout="20" ignore-error="false">
<set-url>https://MYKEYVAULTNAME.vault.azure.net/secrets/CLIENTCERTTEST/?api-version=2016-10-01</set-url>
<set-method>GET</set-method>
<authentication-managed-identity resource="https://vault.azure.net" />
</send-request>
<set-variable name="keyVaultCertBase64" value="@(((IResponse)context.Variables["keyVaultCertResponse"]).Body.As<JObject>()["value"].ToString())" />
<choose>
<when condition="@(context.Request.Certificate == null)">
<return-response>
<set-status code="403" reason="No Client Certificate Provided to APIM" />
</return-response>
</when>
<when condition="@(context.Variables["keyVaultCertResponse"] != context.Request.Certificate.Thumbprint)">
<return-response>
<set-status code="403" reason="Client Certificate Presented to APIM is incorrect" />
</return-response>
</when>
</choose>
<authentication-certificate body="@(Convert.FromBase64String((string)context.Variables["keyVaultCertBase64"]))" />
</inbound>
【问题讨论】:
标签: certificate azure-api-management