我有以下策略语法,当与 GET 请求一起传递时,它仅适用于一个证书。
<choose>
<when condition="@(context.Request.Certificate != null && !context.Request.Certificate.Issuer.Contains("CN=itv.mit-xperts.com"))">
<return-response>
<set-status code="403" reason="Invalid client certificate Issuer" />
</return-response>
</when>
</choose>
如果我使用该策略在两个证书之间进行验证,那么它将始终转到 403,因为 OR 语句始终返回 true:
<choose>
<when condition="@((context.Request.Certificate != null) && (!context.Request.Certificate.Issuer.Contains("CN=itv.mit-xperts.com") || !context.Request.Certificate.Issuer.Contains("CN=DigiCert Test SHA2 Intermediate CA-1")))">
<return-response>
<set-status code="403" reason="Invalid client certificate Issuer" />
</return-response>
</when>
</choose>
API 无需证书即可工作,但如果通过了证书,则“何时”标签可能会或可能不会采取行动。我希望仅在使用具有任何其他颁发者的证书时才使条件变为 403。 根据证书,颁发者信息包含许多不同的属性,但 CN=some-text 仍然很常见。
我对 XML 及其语法或功能一无所知。
以下 Microsoft Docs 可能会有所帮助,但我没有找到任何可能有帮助的语法:
https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions
https://docs.microsoft.com/en-us/azure/api-management/api-management-transformation-policies