У меня есть следующий синтаксис для политики, который работает только для одного сертификата при передаче с запросом 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 могут помочь, но я не нашел синтаксиса, который может помочь:
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